golang是一门十分热门的语言,性能很高。开发效率也几乎可以和Python相提并论。很多开源软件的流行,像kubernetes、docker、etcd等等,更是将golang的发展推向了一个高度。
从本篇开始,我们将一步一步介绍怎样用golang来搭建一个web服务的后台。预计会包括gin介绍、数据库、gin中间件、jwt认证、权限控制、模板、打包等等。
我们首先选定一个rest框架,这里我们选择gin,这是一个性能高效,使用简单,十分流行的一个框架。
需要注意的是gin要求go的版本是1.11+,所以使用之前请先检查您的golang版本,使用以下命令:
$ go version
go version go1.14.3 darwin/amd64
我这里使用的是1.14.3的版本。现在我们来创建一个目录用来作为我们项目的目录:
$ mkdir gosvc
$ cd gosvc/
我们这里使用go module来管理我们的依赖(注意上面创建的目录不是在GOPATH目录下),我们先来初始化一下go module:
~/golangdemo/gosvc$ go mod init github.com/zhuyijing/gosvc
go: creating new go.mod: module github.com/zhuyijing/gosvc
~/golangdemo/gosvc$ ls
go.mod
~/golangdemo/gosvc$ cat go.mod
module github.com/zhuyijing/gosvc
go 1.14
使用go mod init命令来初生成我们的go.mod文件,这个我给我的package起名为 github.com/zhuyijing/gosvc ,你可以换成你自己的命名。通常是 github.com/用户名/项目名 。
现在我们来创建一个main.go文件,输入以下代码:
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() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
然后在输入一下命令来下载依赖:
~/golangdemo/gosvc$ go mod tidy
运行这条命令会自动下载依赖并且更新go.mod文件,同时会生成一个go.sum的文件。现在我们的目录看起来是这样的:
~/golangdemo/gosvc$ tree .
.
├── go.mod
├── go.sum
└── main.go
0 directories, 3 files
查看go.mod文件,你会发现多了一行:
$ cat go.mod
module github.com/zhuyijing/gosvc
go 1.14
require github.com/gin-gonic/gin v1.6.3 // gin依赖
现在来运行我们的代码:
$ go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[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
看看,我们的代码已经成功运行在8080端口了。我们来尝试访问一下,另开一个终端窗口,输入以下命令:
$ curl
{"message":"pong"}
现在一个最简单的rest服务已经运行起来了。下一节,我们将介绍更多gin的高级用法。