本实验手册旨在帮助学员使用 Gin 框架来开发微服务。 Gin 是 Go 语言生态环境中比较出名的 Web 框架,具有简单,高性能,开源等特点。
在第一次练习中,我们首先搭建好项目框架,然后实现一个简单的 rest 服务。
建立项目
新建一个名为: go-todo-api-srv 的目录,用来存放所有项目相关的文件。
1 | mkdir go-todo-api-srv |
进入该目录
1 | cd go-todo-api-srv |
因为我们使用 go modules 来管理依赖,因此首先初始化模块,执行:
1 | go mod init go-todo-api-srv |
如果正常,系统会在目录中新建一个名为: go.mod 的文件,内容如下:
1 | module go-todo-api-srv |
第一行是我们命名的模块名,第三行是当前项目使用的 go 的版本。
在项目中引用 Gin 库
为了在项目中引用 Gin 库,我们可以使用 go get 命令, 执行:
1 | go get github.com/gin-gonic/gin |
如果正常,系统显示:
1 | go: github.com/gin-gonic/gin upgrade => v1.6.2 |
写本文时 Gin 的最新版本为 1.6.2
查看 go.mod 文件,会看到文件的末尾加上了对 gin 库依赖的声明:
1 | module go-todo-api-srv |
同时,我们可以看到在项目中多生成了一个名为: go.sum 的文件,里面包含了具体的依赖库的声明及间接依赖库声明,内容如下:
1 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= |
建立实体类型
在 Go 语言中,没有在其它语言(比如: Java, C#等)中的类,因此为表现一个业务实体的数据我们使用结构类型。为方便以后扩展,我们将所有的业务实体类型放在 entity 目录中。
在项目目录中新建 entity 目录
1 | mkdir entity |
在 entity 目录中新建名为: Todo.go 的文件, 内容如下:
1 | package entity |
建立启动程序
在项目目录中新建名为: main.go 的文件,建立后,整个项目的文件和目录包括:
1 | go-todo-api-srv/ |
在 main.go 中引入对 gin 和自建 entity 的引用:
1 | import ( |
注意:在引入自定义的entity包时,需要使用模块名加上包名
因为在第一次练习中,还没有引入数据库,因此先直接声明一个数组来模拟服务返回的数据:
1 | var todos = []entity.Todo { |
最后,新建 main 函数,启动服务:
1 | func main() { |
可以看到,我们使用 Gin 的路由功能建立了一个路由, 路径是: “/api/todo”。 当用户访问该路径时,对应的函数将被执行,当前只是简单的以JSON形式返回数据。
完整的 main.go 代码如下:
1 | package main |
运行项目
在项目目录中执行:
1 | go run main.go |
如果正常,可以看到如下的系统输出:
1 | [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached. |
可以看到,服务已经启动并在本地的 8080 端口进行监听。
打开浏览器,访问:
1 | http://localhost:8080/api/todo |
可以在浏览器中看到如下内容:
1 | [ |