首先感谢juejin.cn/post/726516… 大佬的文章让我看到go的gin框架
先看一个例子
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(":8082") // 监听并在 本地ip:8082 上启动服务
}
运行结果
Gin 是什么?
Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API,但性能比 Martini 快 40 倍。如果你需要极好的性能,使用 Gin 吧。 gin 官方文档 文档 | Gin Web Framework (gin-gonic.com)
在代码中第10行是一个get请求,url路径就是‘/ping’,之后返回一个json类型的数据,直接显示在页面上。在vscode中重新创建一个文件夹,之后再用go mod init go.mod,创建管理文件的go.mod,不然会报错。之后就是gin框架的安装。在命令行写入
go get -u github.com/gin-gonic/gin
就会在go.mod文件生成代码,再到主文件import("github.com/gin-gonic/gin")
加入静态资源
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
//创建一个服务·
r := gin.Default()
r.LoadHTMLGlob("templates/*")
//访问地址
r.GET("/ping", func(c *gin.Context) {
c.HTML(200, "index.tmpl", gin.H{
"title": "Main website",
})
})
r.Run(":8082") // 监听并在 本地ip:8082 上启动服务
}
结果如下
创建一个文件夹
有一个templates,在到里面创建一个tmpl,里面的传递数据是html不是json,前端通过{{.key}}获得数据,本来里面是要写 http.StatusOK,出错了,借鉴的大佬说,跟200状态码一样就改了。
加入静态资源
首先再生成两个文件夹,一个css,js,在到里面分别创造对应文件。在到html里应用。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
//创建一个服务·
r := gin.Default()
r.LoadHTMLGlob("templates/*")
r.Static("/static", "./static")
//访问地址
r.GET("/ping", func(c *gin.Context) {
c.HTML(200, "gr.html", gin.H{
"title": "Main website",
})
})
r.Run(":8082") // 监听并在 本地ip:8082 上启动服务
}
结果
传递参数
一.通过地址栏,获取url的信息
r.GET("/user", func(context *gin.Context) {
userid := context.Query("userid") //在前端获取到的userid参数,赋值命令为userid
username := context.Query("username") //在前端获取到的username参数,赋值命名为username
context.JSON(200, gin.H{ //将获取到的值,返回给前端
"userid": userid,
"username": username,
})
结果
通过form表单
r.POST("/user/add", func(context *gin.Context) {
username := context.PostForm("username") //PostForm()为专门处理表单的函数
password := context.PostForm("password") //获取刚才前端写的password,username
//可以在这里加入校验密码,名称是否符合规范的判断条件
context.JSON(200, gin.H{ //后端响应数据
"msg": "ok",
"username": username,
"password": password,
})
})
结果