Go语言教程第十集 如何玩转Restful和RPC网络编程( 三 )


Gin 框架
虽然 Go 语言自带的 net/http 包,可以比较容易地创建 HTTP 服务,但是它也有很多不足:
基于以上这些不足,出现了很多Web 框架,如 Mux,Gin、Fiber 等,今天我要为你介绍的就是这款使用最多的 Gin 框架 。
引入 Gin 框架
Gin 框架是一个在上开源的 Web 框架,封装了很多 Web 开发需要的通用功能,并且性能也非常高,可以让我们很容易地写出API 。
Gin 框架其实是一个模块,也就是 Go Mod,所以采用 Go Mod 的方法引入即可 。我在第 18讲的时候详细介绍过如何引入第三方的模块,这里再复习一下 。
首先需要下载安装 Gin 框架,安装代码如下:
$ go get -u github.com/gin-gonic/gin
然后就可以在 Go 语言代码中导入使用了,导入代码如下:
import "github.com/gin-gonic/gin"
通过以上安装和导入这两个步骤,就可以在你的 Go 语言项目中使用 Gin 框架了 。
使用 Gin 框架
现在,已经引入了 Gin 框架,下面我就是用 Gin 框架重写上面的示例,修改的代码如下所示:
ch21/main.go
func main() {r:=gin.Default()r.GET("/users", listUser)r.Run(":8080")}func listUser(c *gin.Context){c.JSON(200,users)}
相比 net/http 包,Gin 框架的代码非常简单,通过它的 GET 方法就可以创建一个只处理 HTTP GET 方法的服务,而且输出 JSON 格式的数据也非常简单,使用 c.JSON 方法即可 。
最后通过 Run 方法启动 HTTP 服务,监听在 8080 端口 。现在运行这个 Gin 示例,在浏览器中输入 :8080/users,看到的信息和通过 net/http 包实现的效果是一样的 。
获取特定的用户
现在你已经掌握了如何使用 Gin 框架创建一个简单的API,并且可以返回所有的用户信息,那么如何获取特定用户的信息呢?
我们知道,如果要获得特定用户的信息,需要使用的是 GET 方法,并且 URL 格式如下所示:
http://localhost:8080/users/2
以上示例中的 2 是用户的 ID,也就是通过 ID 来获取特定的用户 。
下面我通过 Gin 框架 Path 路径参数来实现这个功能,示例代码如下:
ch21/main.go
func main() {//省略没有改动的代码r.GET("/users/:id", getUser)}func getUser(c *gin.Context) {id := c.Param("id")var user Userfound := false//类似于数据库的SQL查询for _, u := range users {if strings.EqualFold(id, strconv.Itoa(u.ID)) {user = ufound = truebreak}}if found {c.JSON(200, user)} else {c.JSON(404, gin.H{"message": "用户不存在",})}}
在 Gin 框架中,路径中使用冒号表示 Path 路径参数,比如示例中的 :id,然后在函数中可以通过 c.Param("id") 获取需要查询用户的 ID 值 。
小提示:Param 方法的参数要和 Path 路径参数中的一致,比如示例中都是 ID 。
现在运行这个示例,通过浏览器访问 :8080/users/2,就可以获得 ID 为 2 的用户,输出信息如下所示:
{"ID":2,"Name":"李四"}
可以看到,已经正确的获取到了 ID 为 2 的用户,他的名字叫李四 。
假如我们访问一个不存在的 ID,会得到什么结果呢?比如 99,示例如下所示:
【Go语言教程第十集 如何玩转Restful和RPC网络编程】? curl http://localhost:8080/users/99{"message":"用户不存在"}%
从以上示例输出可以看到,返回了『用户不存在』的信息,和我们代码中处理的逻辑一样 。
新增一个用户
现在你已经可以使用 Gin 获取所有用户,还可以获取特定的用户,那么你也应该知道如何新增一个用户了,现在我通过 Gin 实现如何新增一个用户,看和你想的方案是否相似 。