这是我参与「第四届青训营 」笔记创作活动的的第9天
在处理网页的网络请求中,go中有许多库实现了该操作,如gin,beego等,今天我们就来了解一下gin框架的常用操作。
- 下载和安装gin框架
go get -u github.com/gin-gonic/gin
- 导入包
import (
"github.com/gin-gonic/gin"
)
导入后在我们的IDEA中可能还是没有显示引用成功,可以在命令行输入以下指令,更新go.mod信息。
go mod tidy
这个操作适用于1.11版本后的golang
- 注册路由
r := gin.Default() #生成默认路由
r.Run("ip:port") #不填写的话默认在127.0.0.1:8080端口运行
- 增删改查
//获取网页内容,relativePath为真实地址,即你对应的服务器地址它文件存储的路径
r.GET(relativePath:"", func(c * gin.Context) {
//c.HTML(http.StatusOK, "index.html", nil) //返回页面
})
r.PUT(relativePath:"", func(c * gin.Context){
})
r.POST(relativePath:"", func(c *gin.Context) {
})
r.DELETE(relativePath:"", func(c *gin.Context) {
})
用户访问网页一般属于GET请求,我们就做服务器的内容,负责将网页的内容返回,像注册,登录这类访问则属于POST请求提交表单,后端收到后可以根据对应的信息在数据库中添加记录,或是比对表单信息是否有误。PUT请求一般用于修改内容,如某些网页有备忘录这种功能,修改内容时就发送PUT请求,与之对应DELETE也是一样的原理。
- 返回JSON信息
//源码type H map[string]interface{},本质上gin.H是对map[string]interface{}这段代码的简写
gin.H{}
c.JSON(httpStatusOK, gin.H{"message":"hello"}) //简单的返回,第一个参数为http状态码,后面自由添加,需要和网页请求配合使用。
我们完成一个页面的处理后需要向前端返回必要的信息,由于现在基本都是前后端分离的项目,使用JSON返回信息是最通用的。请求有各种状态如XXX失败,或者成功,这些都有一个对应的状态码,在golang官方库net/http中用const定义了这些状态码的信息,如下:
这些状态码在HTTP协议中都有相应的规定,同学们最好准确使用,方便定位错误。
- 组
一个网站一般包含多个网页,如/editor/drafts,/editor/content它们的前缀都相同,我们会写成这个样子:
r.GET("/editor/drafts", func(c *gin.Context) {
...
})
r.GET("/editor/content", func(c *gin.Context) {
...
})
很明显我们希望能将前面的editor省略,这样代码更加简洁,就有了Group操作:
editorGroup := r.Group("editor") //生成editor组
{
r.GET("/drafts", func(c *gin.Context) {
...
})
r.GET("/content", func(c *gin.Context) {
...
})
}
在加载前端页面中,也有加载模版的方式,但实际用的并不多,这里就列出一些示例:
r.Static("/static", "static")
r.LoadHTMLGlob("templates/*")
//前端需要写对应的模版代码,这样前后端就不分离了,应用场景少
上面列举了gin框架中简单的操作,使用过程中我们也会接触到数据库查询,可以选择手写SQL语句(性能更高),也可以使用orm框架如gorm(效率更快),你可以自行选择使用。