本文章用于记录学习过程中的重点,以防以后忘记,有个可以记忆的地方。
内容参考于Gin框架介绍及使用|李文周的博客 ,博客里有许多关于Golang的学习点,挺不错的。
以及对应的视频【最新Go Web开发教程】基于gin框架和gorm的web开发实战 (七米出品)
Gin框架
安装
使用go mod
来创建项目时,注意项目不要放在GOPATH
下。
go get -u github.com/gin-gonic/gin
渲染
HTML渲染
Gin框架中使用LoadHTMLGlob()
或者LoadHTMLFiles()
方法进行HTML模板渲染。
func main() {
r := gin.Default() //Default返回一个默认的路由引擎
r.LoadHTMLGlob("templates/**/*") // 渲染多个页面,不指定文件
//r.LoadHTMLFiles("templates/posts/index.html", "templates/users/index.html")// 单个渲染
r.GET("/index", func(c *gin.Context) {
// r.GET第一个参数为路由,第二个为执行的方法。
// C.HTML第一个参数返回状态码,第二个为模板文件。第三个为返回的数据。
c.HTML(http.StatusOK, "index.html", gin.H{
"title": "posts/index", // 返回map对象
})
})
r.Run(":8080")
}
静态文件
当我们渲染的HTML文件中引用了静态文件时,我们只需要按照以下方式在渲染页面前调用gin.Static方法即可。
func main() {
r := gin.Default()
r.Static("/static", "./static")
r.LoadHTMLGlob("templates/**/*")
// ...
r.Run(":8080")
}
补充文件路径处理
关于模板文件和静态文件的路径,我们需要根据公司/项目的要求进行设置。可以使用下面的函数获取当前执行程序的路径。
func getCurrentPath() string {
if ex, err := os.Executable(); err == nil {
return filepath.Dir(ex)
}
return "./"
}
JSON渲染
使用.JSON()
方法,返回json数据
func main() {
r := gin.Default()
// gin.H 是map[string]interface{}的缩写
r.GET("/someJSON", func(c *gin.Context) {
// 方式一:自己拼接JSON
c.JSON(http.StatusOK, gin.H{
"message": "Hello world!"})
})
r.GET("/moreJSON", func(c *gin.Context) {
// 方法二:使用结构体
var msg struct {
Name string `json:"user"`
Message string
Age int
}
msg.Name = "小王子"
msg.Message = "Hello world!"
msg.Age = 18
c.JSON(http.StatusOK, msg)
})
r.Run(":8080")
}
获取参数
获取querystring参数
querystring
指的是URL中?后面携带的参数,例如:/user/search?username=admin&address=xxx
获取请求的querystring参数的方法如下:
func main() {
//Default返回一个默认的路由引擎
r := gin.Default()
r.GET("/user/search", func(c *gin.Context) {
username := c.DefaultQuery("username", "默认值") //当参数不存在的时候,提供一个默认值
//username := c.Query("username") // 正常获取参数,不存在时提供空值
address := c.Query("address")
//输出json结果给调用方
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"username": username,
"address": address,
})
})
r.Run()
}
获取form参数
请求的数据通过form表单
来提交,例如向/user/search
发送一个POST请求,获取请求数据的方式如下:
func main() {
//Default返回一个默认的路由引擎
r := gin.Default()
r.POST("/user/search", func(c *gin.Context) {
// DefaultPostForm取不到值时会返回指定的默认值
//username := c.DefaultPostForm("username", "默认值")
username := c.PostForm("username") // 没有则返回空值
address := c.PostForm(