Gin框架入门 | 青训营

68 阅读2分钟

gin是什么

直接借用官方介绍。

Gin is a web framework written in Go (Golang). It features a martini-like API with performance that is up to 40 times faster thanks to httprouter. If you need performance and good productivity, you will love Gin.

翻译过来的大意是 gin 是一个性能很强且很容易上手的框架,本文将带领读者快速入门gin框架。

基于gin的简单web服务

安装 gin 请在终端输入以下指令:

go get github.com/gin-gonic/gin

然后我们创建一个main.go文件 尝试运行一下 gin 的样例代码。

package main

import (
  "net/http"

  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  r.GET("/ping", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
      "message": "pong",
    })
  })
  r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

然后可以在 apipost、postman 等软件进行测试。 输出:

{"message":"pong"}

这样的话就代表运行成功了。

解析 gin 样例代码

这里一行一行地剖析一下这个样例服务。 第一行代码将 gin.Default() 赋值给了 r,阅读源码中我们可以知道调用 gin.Default() 会返回已附加 Logger 和 Recovery 中间件的 Engine 实例。这里的 r 就是我们的 Engine 实例。

// gin 源码
// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default() *Engine {
	debugPrintWARNINGDefault()
	engine := New()
	engine.Use(Logger(), Recovery())
	return engine
}

其中的 Logger 和 Recovery 中间件地作用可自行了解。 当然我们也可以直接不使用 Default ,进行自定义设置。

再到下面的五行,我们的 Engine 实例调用 GET 实现了一个 GET 请求的接口,"/ping"为我们的路径,后面的一坨是我们的详细逻辑。

func main() {
	r := gin.Default()
	r.GET("/ping", Ping)
	r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

func Ping(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"message": "pong",
	})
}

可知我们通过 GET 请求访问 "/ping" 就会获得一个 JSON 格式的返回值。

最后的 r.Run() 代表我们服务监听在 localhost:8080 。

其中我们监听的地址和端口号都可以自定义。

总结

gin 框架轻量高效,且拥有 快速,支持中间件,crash处理,json验证等特性。作为一个http框架,封装比较优雅,API 友好,源码注释比较明确,对开发者友好。

参考

gin官方中文文档: 文档 | Gin Web Framework (gin-gonic.com)