使用go, gin, gorm编写一个简单的curd的api接口
go 是一门非常灵活的语言,既具有静态语言的高性能,又有动态语言的开发速度快的优点,语法也比较简单,下面是通过简单的代码实现了一个简单的增删改查 api 接口
hello world
常规版
新建 demo1.go 并输入以下代码,进入命令行,go run demo1.go ,就可以看到命令行输出 hello world
package main
import "fmt"
func main() {
fmt.Println("hello word")
}
网络版
使用 go 标准库 http 可以很容易建立一个 http 服务,保存以下代码为 demo2.go
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
_, _ = fmt.Fprintf(w, "%s hello world", r.Method)
})
_ = http.ListenAndServe(":8080", nil)
}
使用 go run 命令,打开浏览器 http://127.0.0.1:8080/ 查看效果。

通过上面,发现 go 程序代码的结构为:包申明->导入包->函数。其中 main 包说明该程序是一个独立的程序,main 函数是入口函数。
gin
gin 是一个基于 http 库的轻量级 go 框架,只要几行代码就可以起一个 api 服务,使用前需要下载这个库,
demo
$ go get github.com/gin-gonic/gin 使用 go get 来下载库
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default() // 返回一个默认的gin实例
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
_ = r.Run() // 默认在 0.0.0.0:8080 上监听并服务
}
保存上面代码在 api.go 中,运行 go run api.go,浏览器或 postman 打开 http://127.0.0.1:8080/ping 查看效果

gorm
gorm 是一个类似于 laravel 中的 Eloquent ORM,支持mysql,sqlite等多种数据库,使用前请下载
$ go get github.com/jinzhu/gorm
$ go get github.com/mattn/go-sqlite3 //sqlite驱动
curd api
利用以上包,编写一个对用户资料实现增删改查的接口
新增用户接口
package main
import (
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
"log"
)
var db *gorm.DB
var err error
type User struct {
ID uint `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
func main() {
db, err = gorm.Open("sqlite3", "./api.db")
//使用mysql, gorm.Open(“mysql”, “user:pwd@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local”)
if err != nil {
log.Fatal("db connect error")
}
defer db.Close() //延时调用函数
db.AutoMigrate(&User{})
r := gin.Default()
r.GET("/users", index) //获取所有用户
r.GET("/users/:id", show) //根据id获取用户
r.POST("/users", store) //保存新用户
r.PUT("/users/:id", update) //根据id更新用户
r.DELETE("/users/:id", destroy) //根据id删除用户
_ = r.Run()
}
func index(c *gin.Context) {}
func show(c *gin.Context) {}
func store(c *gin.Context) {
var user User
_ = c.BindJSON(&user) //绑定一个请求主体到一个类型
db.Create(&user)
c.JSON(200, user)
}
func update(c *gin.Context) {}
func destroy(c *gin.Context) {}
postman 测试效果

获取所有用户接口
func index(c *gin.Context) {
var users []User
db.Find(&users)
c.JSON(200, users)
}
postman 测试效果

获取指定id用户接口
func show(c *gin.Context) {
id := c.Params.ByName("id")
var user User
db.First(&user, id)
if user.ID == 0 {
c.JSON(404, gin.H{"message": "user not found"})
return
}
c.JSON(200, user)
}
postman 测试效果

更新和删除接口
func update(c *gin.Context) {
id := c.Params.ByName("id")
var user User
db.First(&user, id)
if user.ID == 0 {
c.JSON(404, gin.H{"message": "user not found"})
return
} else {
_ = c.BindJSON(&user)
db.Save(&user)
c.JSON(200, user)
}
}
func destroy(c *gin.Context) {
id := c.Params.ByName("id")
var user User
db.First(&user, id)
if user.ID == 0 {
c.JSON(404, gin.H{"message": "user not found"})
return
} else {
_ = c.BindJSON(&user)
db.Delete(&user)
c.JSON(200, gin.H{"message": "delete success"})
}
}
End
参考:https://medium.com/@cgrant/developing-a-simple-crud-api-with-go-gin-and-gorm-df87d98e6ed1
使用go, gin, gorm编写一个简单的curd的api接口的更多相关文章
- 编写一个简单的C++程序
编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- 编写一个简单的Web Server
编写一个简单的Web Server其实是轻而易举的.如果我们只是想托管一些HTML页面,我们可以这么实现: 在VS2013中创建一个C# 控制台程序 编写一个字符串扩展方法类,主要用于在URL中截取文 ...
- javascript编写一个简单的编译器(理解抽象语法树AST)
javascript编写一个简单的编译器(理解抽象语法树AST) 编译器 是一种接收一段代码,然后把它转成一些其他一种机制.我们现在来做一个在一张纸上画出一条线,那么我们画出一条线需要定义的条件如下: ...
- Java入门篇(一)——如何编写一个简单的Java程序
最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...
- 用 Go 编写一个简单的 WebSocket 推送服务
用 Go 编写一个简单的 WebSocket 推送服务 本文中代码可以在 github.com/alfred-zhong/wserver 获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息 ...
- 用C语言编写一个简单的词法分析程序
问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...
- 用Python编写一个简单的Http Server
用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...
- 手把手教你编写一个简单的PHP模块形态的后门
看到Freebuf 小编发表的用这个隐藏于PHP模块中的rootkit,就能持久接管服务器文章,很感兴趣,苦无作者没留下PoC,自己研究一番,有了此文 0×00. 引言 PHP是一个非常流行的web ...
随机推荐
- asp.net core 3.0 gRPC框架小试
什么是gRPC gRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优 ...
- 【公告】关于8.8MIP组件审核平台故障的说明
故障通报 2017 年 8 月 8 日 下午 14:11,由于机器故障原因,MIP 组件管理平台暂时无法提供服务. 2017 年 8 月 8 日 下午 16:46, 故障已解决.MIP 组件管理平台服 ...
- JAVA基础第三章-类与对象、抽象类、接口
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- JS的 try catch使用心得
try{ //正常执行 }catch(e/*你感觉会出错的 错误类型*/){ // 可能出现的意外 eg:用户自己操作失误 或者 函数少条件 不影响下面的函数执行 // 有时也会用在 比如 focus ...
- 从壹开始前后端 [vue后台] 之一 || 权限后台系统 1.0 正式上线
缘起 哈喽各位小伙伴周三好,春节已经过去好多天了,群里小伙伴也各种催搞了,新年也接了新项目,比较忙,不过还是终于赶上这个二月的尾巴写了这篇文章,也把 vue 权限后台上线了(项目地址:http://1 ...
- Springboot 系列(六)Spring Boot web 开发之拦截器和三大组件
1. 拦截器 Springboot 中的 Interceptor 拦截器也就是 mvc 中的拦截器,只是省去了 xml 配置部分.并没有本质的不同,都是通过实现 HandlerInterceptor ...
- Redis调用的流程(新手使用)
就用查省市为例,别人还没查就把所有都弄好,很浪费资源和时间,redis是为了存储常用的查询操作的[结果],以此来减少直接查询数据库的次数,以下内容仅供参考,请勿照抄.(如有说得不好之处,请指点.) 言 ...
- STM32的IAP实现
STM32的IAP实现 2014年07月28日 16:31:06 Stylesen 阅读数:556 IAP,全称是“In-Application Programming”,中文解释为“在程序中编程 ...
- python 基础语法梳理
最近涉及到python的东西比较多,抽一点时间把基础语法规整下. 1.面向对象 #coding=utf-8 def _class_test_01(): s = squire(3,4) print(&q ...
- Linux 桌面玩家指南:01. 玩转 Linux 系统的方法论
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...