这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记
本文通过使用Gin框架开发一个简单的两数加法服务器
目的:
- 认识Go工程添加依赖包的方法
- 认识Gin框架提供的基本API
- 认识Go工程代码的分层管理
一、引入并测试Gin框架
1.1 添加Gin框架依赖
- 新建工程 mkdir go-exercise-example && cd go-exercise-example(工程文件夹)
- 利用go mod指令初始化当前工程: go mod init go-exercise-example
执行完毕可以看到工程文件夹下面自动生成了一个go.mod文件
- 执行go env指令确认 GO111MODULE="on" 并设置GOPROXY="goproxy.cn"
- 执行go get指令引入Gin包:go get -u github.com/gin-gonic/gin
执行完毕发现go.mod文件中自动添加了一些与Gin框架相关的依赖,同时工程文件夹下面多出一个go.sum文件
1.2 新建hello服务器并测试
在工程文件夹下面新建Hello文件夹,实现一个监听在localhost:8080的hello服务器,这个服务器对来自/hello路径的请求做出响应。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
server := gin.Default()
server.GET("/hello", func(ctx *gin.Context) {
ctx.JSON(200, "hello")
})
err := server.Run() //默认监听8080端口
if err != nil {
return
}
}
在浏览器中输入127.0.0.1:8080/hello之后可以得到服务器给出的"hello"响应
与此同时可以看到Gin框架输出了相应日志
小结
通过go的包管理工具成功引入了Gin包并通过了hello server测试。
二、实现一个整数加法计算器
这个例子实现虽然简单,但是可以借此练习代码的分层管理。首先在工程文件夹下新建server.go,在这个文件中处理服务器的主体逻辑,其中第16行调用Add函数,实现对整数加法的支持
package main
import (
"go-exercise-example/service"
"strconv"
"github.com/gin-gonic/gin"
)
func main() {
server := gin.Default()
server.GET("/adder/:a/:b", func(ctx *gin.Context) {
a, _ := strconv.Atoi(ctx.Param("a"))
b, _ := strconv.Atoi(ctx.Param("b"))
ret := service.Add(a, b)
ctx.JSON(200, ret)
})
err := server.Run() //默认监听8080端口
if err != nil {
return
}
}
之后在工程文件夹下新建service文件夹,对Add函数进行定义,这样就把主函数服务器的响应逻辑和服务器调用的服务函数逻辑进行了解耦,方便代码的维护和修改,更加符合工程习惯。
package service
func Add(a, b int) int {
return a + b
}
利用以上的代码就构建了一个提供整数加法服务的服务器,在浏览器中输入正确的URL指令
"127.0.0.1:8080/adder/1/2”,回车就得到服务器返回的计算结果:3
最终这个工程的目录结构如下图
最后还值得一提的是:上面GET方法通过指定路由来获取参数,路由中以冒号开头的":a",":b"两个字段相当于占位符,用它们来替代用户实际请求URL中对应的参数。
除此之外,Gin框架还提供了Query系列方法获取Get请求的参数, 下面的代码是利用Query方法获取Get请求参数的实现
server.GET("/adder", func(ctx *gin.Context) {
a, _ := strconv.Atoi(ctx.Query("a"))
b, _ := strconv.Atoi(ctx.Query("b"))
ret := service.Add(a, b)
ctx.JSON(200, ret)
})
在浏览器中输入URL:"127.0.0.1:8080/adder?a=3&b=4"之后,回车就得到服务器返回的计算结果:7
小结
通过实现一个提供整数加法服务的服务器,练习了代码的层级划分
练习了Gin框架获取Get请求参数的两种方式
总结
- Go语言提供了强大的包管理工具来处理项目的依赖关系,通过简单的go mod init, go get等指令就可以轻松的引入外部框架。
- Gin框架提供了十分方便的API来处理Http请求报文。
- 项目开发中注意对功能的层级进行划分,对功能进行解耦可以提高代码的可维护和可拓展性。