Gin介绍
Gin是一个Go编写的轻量级http web框架,运行速度非常快;
Gin最擅长的就是Api接口的高并发,如果项目规模不大且业务相对简单,这个时候推荐用Gin;
当某个接口的性能遭到较大挑战的时候,也可以考虑使用Gin框架重写接口。
Gin官网:gin-gonic.com/zh-cn/
安装
要安装 Gin 包,需要先安装 Go 并设置 Go 工作区,安装go及其环境配置步骤在往期博文已详细列出,请移步往期博文。
打开终端-->cmd-->输入go version,出现如下界面则go安装成功。
继续输入go env,出现如下界面则表示go环境已成功搭建
下载并安装gin:
go get -u github.com/gin-gonic/gin
此步可能会出现报错,我这里的错误经使用代理成功解决[安装gin失败 # cd .; git clone -- https://github.com/gin-gonic/gin xcrun: error: invalid active develope_Sai_BAN的博客-CSDN博客](url)
开始
接下来就可以正式开启Gin框架的学习之旅啦
打开VScode,编写一个go程序
package main
import "github.com/gin-gonic/gin"
func main() {
//创建一个默认路由引擎
r := gin.Default()
//配置路由
r.GET("/", func(c *gin.Context) {
c.String(200, "值:%v", "你好gin")
})
//注意:此处200可更换为http.statusOK,此时需要引入"net/http"包
r.GET("/news", func(c *gin.Context) {
c.String(200, "我是新闻")
})
r.POST("/add", func(c *gin.Context) {
c.String(200, "我是post请求,主要用于增加数据")
})
r.PUT("/edit", func(c *gin.Context) {
c.String(200, "我是put请求,主要用于编辑数据")
})
r.DELETE("/delete", func(c *gin.Context) {
c.String(200, "我是delete请求,主要用于删除数据")
})
r.Run(":8000") //启动一个web服务
}
在终端输入go run main.go启动服务,在浏览器中输入localhost://8000
Golang程序的热加载
热加载即当我们对代码进行修改时,程序能够自动重新加载并执行,这在我们并发中是非常便利的,可以快速进行代码测试,省去了每次手动重新编译。
在cmd终端输入此命令:
go get github.com/pilu/fresh
接着输入fresh
接下来就能自动编译了,快来一起动手试试吧!
Gin框架中的路由
1、路由概述
路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。
通俗来讲,路由就是url地址到业务处理代码的映射。当用户输入一个url地址时,服务器该知道该用户返回什么内容。比如,当用户点击登录时,服务器应该做登录相关的事情,并给用户返回登录成功或失败的页面。当用户点击退出时,服务器应该做和退出相关的事情(比如清理用户登录的数据),并返回给用户退出之后的页面。一个url到一个具体的处理函数之间的映射叫做一条路由。
2.c.String() c.JSON() c.JSONP() c.HTML()
c.String()--返回一个字符串
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.String(200, "值:%v", "首页")
})
r.Run(":8081")
}
c.JSON()--返回一个JSON数据
package main
import "github.com/gin-gonic/gin"
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 = "mst"
msg.Message = "Hello world!"
msg.Age = 20
c.JSON(http.StatusOK, msg)
})
r.Run(":8081")
}
c.JSONP()--支持回滚填入
package main
import "github.com/gin-gonic/gin"
type Article struct {
Title string
Desc string
Content string
}
func main() {
r := gin.Default()
r.GET("/jsonp", func(c *gin.Context) {
a := &Article{
Title: "i am a title-jsonp",
Desc: "destruction",
Content: "test content",
}
c.JSONP(200, a)
})
r.Run(":8081")
}
//http://localhost:8081/jsonp?callback=xxx
//xxx({"Title":"i am a title-jsonp","Desc":"destruction","Content":"test content"});
c.HTML()--渲染模板,可显示html页面中的数据
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.LoadHTMLGlob("templates/*") //配置模板文件,templates文件夹中有index.html文件
//注意在路由上方配置r.LoadHTMLGlob("templates/*")
r.GET("/index", func(c *gin.Context) {
c.HTML(200, "index.html", gin.H{
"title": "我是后台数据",
})
})
r.Run(":8081")
}
通过访问localhost:8081/index显示的页面内容为index.html中的内容,若想显示"我是后台数据",则需在index.html页面中加入{{.tilte}}来访问,如下图所示。