Go的gin框架 | 青训营

167 阅读2分钟
首先感谢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 上启动服务

}

运行结果

image.png

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 上启动服务

}

结果如下

image.png

创建一个文件夹

有一个templates,在到里面创建一个tmpl,里面的传递数据是html不是json,前端通过{{.key}}获得数据,本来里面是要写 http.StatusOK,出错了,借鉴的大佬说,跟200状态码一样就改了。

image.png

加入静态资源

首先再生成两个文件夹,一个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 上启动服务

}

结果

image.png

传递参数

一.通过地址栏,获取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,
		})

结果

image.png

通过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,
		})
	})

  

结果

image.png

image.png

最后还是感谢juejin.cn/post/726516…