使用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 ...
随机推荐
- 新手篇丨Python任意网段Web端口信息探测工具
你学习Python的目的是什么?是想写爬虫爬取数据(数据.图片等内容),还是想自写自动化的小工具,又或是作为一个新手小白单纯的欣赏这门语言呢? 今天i春秋分享的是一篇关于多线程工具的文章,工具使用效率 ...
- java 理解如何实现图片验证码 傻瓜都能看懂。
先代码后解释: 只要把代码复制到你的项目中就可以了. 代码: 验证码工具类: package cn.happy.util.imagesVerTion; /** * Author: SamGroves ...
- MobileForm控件的使用方式-用.NET(C#)开发APP的学习日志
今天继续Smobiler开发APP的学习日志,这次是做一个title.toolbar.侧边栏三种效果 样式一 一. Toolbar 1. 目标样式 我们要实现上图中的效果 ...
- alter session set current_schema=Schema
使用CURRENT_SCHEMA之后,当前会话所参考的默认SCHEMA变为设置的用户,而不再是当前的用户:其实需要稍微理解一下user和schema的区别先:user即oracle中的用户,和所有系统 ...
- 关于Redis和Memcache的比较
关于Redis和Memcache在应用中,都可以实现缓存的功能,但是,具体使用情况需要根据具体业务场景,尤其是对缓存数据有特性要求时,需要选择对应的缓存机制. 共同点: 都是基于内存的数据库,可用作缓 ...
- linux操作系统的前世今生
linux操作系统是李纳斯-拖瓦兹于1970年正式发布第一个真正的内核版本,他也称Linux之父,Linux是由Unix发展而来,发展到现在Linux操作系统凭借着良好的性能和稳定性已被linux已被 ...
- kafka监控项目大全
https://github.com/claudemamo/kafka-web-console http://github.com/pinterest/doctorkafka http://g ...
- 再谈AbstractQueuedSynchronizer3:基于AbstractQueuedSynchronizer的并发类实现
公平模式ReentrantLock实现原理 前面的文章研究了AbstractQueuedSynchronizer的独占锁和共享锁,有了前两篇文章的基础,就可以乘胜追击,看一下基于AbstractQue ...
- mysql之聚合函数、group by、having
sql中提供聚合函数可以用来统计,求和,求最值等 那么聚合函数有哪些呢? COUNT 统计行数量 SUM 求某一列的和 AVG 求某一列的平均值 MAX 求某 ...
- python-memcached学习笔记
介绍: memcached是免费.开源.高性能.分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态web应用程序的使用. 数据类型:只用一种字符串类型 1:安装 sudo apt- ...