红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 专栏
  3. Go语言编程笔记
  4. 正文

Go Gin 快速上手指南

2021年11月4日 286点热度 1人点赞 0条评论

image-20211104180320178

图源:Golang Gin-Github

Gin是Go语言的一个Web框架,可以用于开发Web程序或者Web API。

使用Gin的前提当然是要安装Go语言本体,并进行相关设置,这方面内容可以阅读Go语言编程笔记1:Hello World。

下载Gin框架本体很简单:

go get -u -v github.com/gin-gonic/gin

但该应用会引用一些官方组件,所以在下载过程中会尝试下载其它引用的官方组件,而这可能因为Go的官方网站不能访问而失败,解决的方法有两种:

  1. 提前下载好依赖的官方工具包:git clone https://github.com/golang/tools.git d:/workspace/go/src/golang.org/x/tools,这里需要将命令行中的目标路径修改为你自己的$GOPATH下的对应路径。

  2. 启用Go的代理功能:

    go env -w GO111MODULE=on
    go env -w GOPROXY=https://goproxy.cn,direct

个人推荐第二种方式。

下载好本体后可以创建测试代码进行测试:

// geektutu.com
// main.go
package main
​
import (
    "net/http"
​
    "github.com/gin-gonic/gin"
)
​
func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.String(200, "Hello, Geektutu")
    })
    r.GET("/user/:name", func(c *gin.Context) {
        name := c.Param("name")
        c.String(200, "Input name is %s", name)
    })
    r.GET("/users", func(c *gin.Context) {
        name := c.Query("name")
        age := c.DefaultQuery("age", "10")
        c.String(200, "Your name is %s, age is %s", name, age)
    })
    r.GET("/add", func(c *gin.Context) {
        name := c.Query("name")
        age := c.DefaultQuery("age", "10")
        c.String(http.StatusOK, "Add user name(%s) age(%s)", name, age)
    })
    r.Run() // listen and serve on 0.0.0.0:8080
}

这里的测试代码是我修改自Go Gin 简明教程的代码。

这里最好在$GOPATH/src/目录下创建一个新的目录进行测试。

如果通过go run xxx.go的方式不能运行,提示找不到go.mod文件,那是因为你启用了Go modules功能,需要通过该功能初始化包,生成包配置文件go.mod后才可以正常运行。

进入该测试代码的目录后执行:

❯ go mod init
go: creating new go.mod: module gin_test
go: to add module requirements and sums:
        go mod tidy
❯ go mod tidy
go: finding module for package github.com/gin-gonic/gin
go: found github.com/gin-gonic/gin in github.com/gin-gonic/gin v1.7.4
go: downloading github.com/stretchr/testify v1.4.0
...省略

这样就可以自动创建包配置文件:

module gin_test
​
go 1.17
​
require github.com/gin-gonic/gin v1.7.4
​
require (
    github.com/gin-contrib/sse v0.1.0 // indirect
    github.com/go-playground/locales v0.13.0 // indirect
    github.com/go-playground/universal-translator v0.17.0 // indirect
    github.com/go-playground/validator/v10 v10.4.1 // indirect
    ...省略
    golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
    golang.org/x/sys v0.0.0-20211103235746-7861aae1554b // indirect
    gopkg.in/yaml.v2 v2.2.8 // indirect
)
​

一般来说该文件不应该被手动修改。

更多go mod的命令可以通过go mod help进行查看。

现在通过go run xxx.go或者IDE就可以正常运行这个测试用的Web应用了:

...省略
[GIN-debug] GET    /users                    --> main.main.func3 (3 handlers)
[GIN-debug] GET    /add                      --> main.main.func4 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080

在浏览器访问http://localhost:8080/users?name=lalala:

image-20211104174247920

最后还有一个需要改善的问题是,Go语言是静态语言,并不能像PHP那样修改即可见,每次都需要手动结束进程后重新启动。但这个问题是可以借助其它第三方工具来解决的:

go get -v -u github.com/pilu/fresh

下载过程中可能会出现一些错误提示,说应当使用go install xxx之类的,这是因为新版本的Go建议对于可运行的Go程序应当使用go install,不过这里我们直接忽略就可以了。

在测试代码所在的目录执行:

❯ fresh
17:57:15 runner      | InitFolders
17:57:15 runner      | mkdir ./tmp
17:57:15 runner      | mkdir ./tmp: Cannot create a file when that file already exists.
17:57:15 watcher     | Watching .
17:57:15 main        | Waiting (loop 1)...
17:57:15 main        | receiving first event /
17:57:15 main        | sleeping for 600 milliseconds
17:57:15 main        | flushing events
17:57:15 main        | Started! (5 Goroutines)
17:57:15 build       | Building...
17:57:19 runner      | Running...
17:57:19 main        | --------------------
17:57:19 main        | Waiting (loop 2)...
...省略

记得先停止之前的Web应用进程。

现在修改示例代码后保存就可以自动重新运行Web应用,感受上更接近于PHP那种“修改后可以立即看到效果”的方式。

其它Gin框架的使用说明可以参考Golang Gin-Github或者Go Gin 简明教程。

谢谢阅读。

参考资料

  • Go Gin 简明教程

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Gin Go语言
最后更新:2021年11月22日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇
下一篇 >

文章评论

取消回复

*

code

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号