前置条件
我们首先需要安装 Go 语言开发环境并创建 Go 工程。
安装依赖包
go get -u github.com/gin-gonic/gin
Gin 介绍
有过其他语言的 Web 开发经历的同学应该对Springboot、Django、Flask等框架很熟悉,类似的,Gin 是 Go 语言的一个很流行的 Web 开发框架,支持路由、中间件等常用的配置,而且得益于 Go 语言的性能,Gin 相比 Java 的Springboot、Python 的 Django 等框架不仅性能有保证,运行占用也很少,配置起来也比较简单。
接下来我们就结合本次青训营的项目上手写一下代码试试。
快速上手
开启服务
// main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.Run()
}
这样我们的服务就跑起来了,默认地址和端口就是localhost:8080。使用r.Run(":port")可以自定义端口。
定义路由
在开始服务后,我们肯定需要把不同的请求映射给不同的函数来进行参数的解析并在处理后返回响应给到客户端,这个过程就是路由。
// main.go
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.JSON(http.statusOK, gin.H{
"message": "hello, world",
})
})
r.Run()
}
这里的 GET 说明,请求是 HTTP 的 GET 请求,类似的我们还可以使用 POST 函数定义一个 HTTP POST 请求。 后面紧跟着一个匿名函数,则是用来处理请求的函数。这里是匿名函数,我们也可以定义类似格式的函数,并将函数作为参数传入。而这个函数就被认为是 Controller。
// main.go
func main() {
r := gin.Default()
r.GET("/hello", HelloController)
r.Run()
}
// controller.go
func HelloController(c *gin.Context) {
c.JSON(http.statusOK, gin.H{
"message": "hello, world",
})
}
这里的 context 是请求的上下文,所以一定要作为参数。通过它我们可以获取到请求的详细信息。
这里的 JSON 方法会返回 JSON 格式的数据给客户端。
获取参数
-
Query
无论是 GET 还是 POST 请求,对于类似于
/u/r/l/?foo=123&bar=xxx的形式的请求,我们都可以用c.Query("foo")的形式获取参数。这种方式在本次项目中用的比较多。 -
Param
对于动态路由,比如
"/u/r/l/:foo/:bar"的形式,可以使用c.Param("foo")的形式获取参数。 -
PostForm
对于 POST 的表单数据,可以使用
c.PostForm("foo")的形式获取对应的参数。 -
Bind
当参数比较多时,一个一个的获取似乎并不优雅,Gin 提供了一种更优雅的写法,那就是
c.Bind,我们可以定义一个参数集合的结构体,定义一个实例,并将其引用传入Bind方法,这样可以一次性获取请求的参数值。