Go实战--通过gin-gonic框架搭建restful api服务(github.com/gin-gonic/gin)
生命不止,继续 go go go !!!
先插播一条广告,给你坚持学习golang的理由:
《2017 软件开发薪酬调查:Go 和 Scala 是最赚钱的语言》
言归正传!
之前写过使用golang实现简单的restful api相关的博客:
Go实战–实现简单的restful api(The way to go)
其中,使用了github.com/gorilla/mux,今天要跟大家介绍的是gin-gonic/gin。
gin-gonic/gin
介绍:
Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance – up to 40 times faster. If you need smashing performance, get yourself some Gin.
github地址:
https://github.com/gin-gonic/gin
获取:
go get github.com/gin-gonic/gin
1
例子:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
运行:
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /ping --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
1
2
3
4
5
6
7
8
通过浏览器访问:
http://localhost:8080/ping
// 20170808110257
// http://localhost:8080/ping
{
"message": "pong"
}
1
2
3
4
5
6
全局设置环境:
gin.SetMode(gin.DebugMode)
1
或
gin.SetMode(gin.ReleaseMode)
1
获得路由实例:
r := gin.Default()
1
构建restful api
创建五个routes:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
v1 := router.Group("/api/v1/userinfo")
{
v1.POST("/", CreateUser)
v1.GET("/", FetchAllUsers)
v1.GET("/:id", FetchSingleUser)
v1.PUT("/:id", UpdateUser)
v1.DELETE("/:id", DeleteUser)
}
router.Run()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
下面我们要使用gin+mysql构建restful api。
如果对于golang中的MySQL不够熟悉的话,可以看看我之前写过的博文:
Go实战–go语言操作MySQL数据库(go-sql-driver/mysql)
先实现一个简单的根据id来FetchSingleUser吧:
我们事先通过命令行创建了user_info表以及一行数据,id=2, name=wangshubo
开始golang程序:
定义结构体:
type Person struct {
Id int
Name string
}
1
2
3
4
check函数:
func checkErr(err error) {
if err != nil {
panic(err)
}
}
1
2
3
4
5
FetchSingleUser方法:
我们要返回json, gin对json也进行了封装,所以不再需要我们提供类似encoding/json之类的package。
func FetchSingleUser(c *gin.Context) {
id := c.Param("id")
db, err := sql.Open("mysql", "root:wangshubo@/test?charset=utf8")
checkErr(err)
defer db.Close()
err = db.Ping()
checkErr(err)
var (
person Person
result gin.H
)
row := db.QueryRow("select id, name from user_info where id = ?;", id)
err = row.Scan(&person.Id, &person.Name)
if err != nil {
// If no results send null
result = gin.H{
"result": nil,
"count": 0,
}
} else {
result = gin.H{
"result": person,
"count": 1,
}
}
c.JSON(http.StatusOK, result)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
浏览器访问:
http://localhost:8080/api/v1/userinfo/1
// 20170808141904
// http://localhost:8080/api/v1/userinfo/1
{
"count": 0,
"result": null
}
1
2
3
4
5
6
7
浏览器访问:
http://localhost:8080/api/v1/userinfo/2
// 20170808141940
// http://localhost:8080/api/v1/userinfo/2
{
"count": 1,
"result": {
"Id": 2,
"Name": "wangshubo"
}
}
1
2
3
4
5
6
7
8
9
10
gin输出log:
[GIN] 2017/08/08 - 14:19:03 | 200 | 16.0127ms | ::1 | GET /api/v1/userinfo/1
[GIN] 2017/08/08 - 14:19:39 | 200 | 56.0381ms | ::1 | GET /api/v1/userinfo/2
1
2
未完待续:
组织代码结构
---------------------
作者:一蓑烟雨1989
来源:CSDN
原文:https://blog.csdn.net/wangshubo1989/article/details/76906605
版权声明:本文为博主原创文章,转载请附上博文链接!
Go实战--通过gin-gonic框架搭建restful api服务(github.com/gin-gonic/gin)的更多相关文章
- 基于gin web框架搭建RESTful API服务
这篇主要学习go项目中的项目结构.项目规范等知识,ROM采用的database/sql的写法. 1.技术框架 利用的是ginweb框架,然后ROM层选用database/sql,安装mysql驱动.安 ...
- 使用CodeIgniter框架搭建RESTful API服务
使用CodeIgniter框架搭建RESTful API服务 发表于 2014-07-12 | 分类于 翻译笔记 | 6条评论 在2011年8月的时候,我写了一篇博客<使用Cod ...
- 基于Gin+Gorm框架搭建MVC模式的Go语言后端系统
文/朱季谦 环境准备:安装Gin与Gorm 本文搭建准备环境:Gin+Gorm+MySql. Gin是Go语言的一套WEB框架,在学习一种陌生语言的陌生框架,最好的方式,就是用我们熟悉的思维去学.作为 ...
- 使用 Beego 搭建 Restful API 项目
1 环境准备 首先你需要在你的环境安装以下软件: go:编程语言运行环境 git:版本控制工具 beego:go 语言流行的开发框架 bee:beego 配套的快速搭建工具 你喜欢的数据库:这里以 M ...
- 【PHP】基于ThinkPHP框架搭建OAuth2.0服务
[PHP]基于ThinkPHP框架搭建OAuth2.0服务 http://leyteris.iteye.com/blog/1483403
- 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务
本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...
- 开放接口/RESTful/Api服务的设计和安全方案
总体思路 这个涉及到两个方面问题:一个是接口访问认证问题,主要解决谁可以使用接口(用户登录验证.来路验证)一个是数据数据传输安全,主要解决接口数据被监听(HTTPS安全传输.敏感内容加密.数字签名) ...
- 玩转 SpringBoot 2 快速搭建 | RESTful Api 篇
概述 RESTful 是一种架构风格,任何符合 RESTful 风格的架构,我们都可以称之为 RESTful 架构.我们常说的 RESTful Api 是符合 RESTful 原则和约束的 HTTP ...
- 搭建RESTful API 之 实现WSGI服务的URL映射
javarestfull 搭建参考 http://blog.csdn.net/hejias/article/details/47424511 问题引出:对于一个稍具规模的网站来说,实现的功能不可能通过 ...
随机推荐
- [bzoj1787][Ahoi2008]Meet 紧急集合(lca)
传送门 可以看出,三个点两两之间的lca会有一对相同,而另一个lca就是聚集点. 然后搞搞就可以求出距离了. ——代码 #include <cstdio> #include <cst ...
- POJ3041:Asteroids【二分图匹配】
二分图的最大匹配=最小顶点覆盖(Konig定理)=最大独立集的补集最大匹配经典的三种模型 这题就是最小顶点覆盖,顺便这题留给我的经验就是调试的时候一定要细心细心再细心对模板的各个细节都要熟!! #i ...
- 2016 Multi-University Training Contest 3 solutions BY 绍兴一中
1001 Sqrt Bo 由于有\(5\)次的这个限制,所以尝试寻找分界点. 很容易发现是\(2^{32}\),所以我们先比较输入的数字是否比这个大,然后再暴力开根. 复杂度是\(O(\log\log ...
- 【UOJ179】线性规划(单纯形)
题意: 思路:单纯形模板 ..,..]of double; idx,idy,q:..]of longint; c:..]of double; n,m,i,j,op,x,y:longint; eps,m ...
- ORA-01034: ORACLE not available 出错
调用db.rlogon("sm/sm")出现以下错误 ORA-01034: ORACLE not availableORA-27101: shared memory realm d ...
- OSGI是什么
OSGI(Open Services Gateway Initiative),或者通俗点说JAVA动态模块系统,定义了一套模块应用开发的框架.OSGI容器实现方案如Knopflerfish, Equi ...
- Python开发的一个IDE推荐,Sublime Text 3
Sublime Text 3 官网下载地址为, LINK. 目前最新版本是3114. 这里转载泱泱长空的授权文件(注册码)文章[1],将几个可以用的注册码列举如下: 补充:2016.05 最近经过测试 ...
- Shiro note
我们需要实现Realms的Authentication 和 Authorization.其中 Authentication 是用来验证用户身份,Authorization 是授权访问控制,用于对用户进 ...
- 简述HashMap和Hashtable的差别
1.HashMap继承AbstractMap类. Hashtable继承了Dictionary类. 2.HashMap同意有null的键和值. Hashtable不同意有null的键和值. ...
- javascript是什么?
JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由全部的现 ...