wordpress 站点换域名,百色建设厅网站,wordpress文章定时发布,网站建设需要的模块一.Gin 介绍Gin 是一个 Go (Golang) 编写的轻量级 http web 框架#xff0c;运行速度非常快#xff0c;如果你是性能和高效的追求者#xff0c;推荐你使用 Gin 框架.Gin 最擅长的就是 Api 接口的高并发#xff0c;如果项目的规模不大#xff0c;业务相对简单#xff0c;这…一.Gin 介绍Gin 是一个 Go (Golang) 编写的轻量级 http web 框架运行速度非常快如果你是性能和高效的追求者推荐你使用 Gin 框架.Gin 最擅长的就是 Api 接口的高并发如果项目的规模不大业务相对简单这个时候也推荐使用 Gin.当某个接口的性能遭到较大挑战的时候这个还是可以考虑使用 Gin 重写接口.Gin 也是一个流行的 golang Web 框架Github Strat 量已经超过了 50k.Gin 的官网https://gin-gonic.com/zh-cn/Gin Github 地址https://github.com/gin-gonic/gin二.Gin 环境搭建要安装 Gin 软件包需要先安装 Go 并设置 Go 工作区下载并安装 gingo get -u github.com/gin-gonic/gin由于网络原因国内部分用户可能没法直接下载第三方包,go get 失败,Golang Gin中没法下载第三方包解决办法如下://打开终端并执行
go env -w GO111MODULEon
go env -w GOPROXYhttps://goproxy.cn,direct2.将 gin 引入到代码中import github.com/gin-gonic/gin3. 如果使用诸如 http.StatusOK 之类的常量则需要引入 net/http 包import net/http4.新建main.go配置路由package mainimport (github.com/gin-gonic/ginnet/http
)func main() {
// 创建gin的默认路由引擎
r : gin.Default()
// 配置路由
r.GET(/, func(c *gin.Context) {c.JSON(200, gin.H{ // c.JSON返回 JSON 格式的数据message: Hello world!, })})// 浏览器访问请求127.0.0.1:8080/ping路由时,调用回调函数
r.GET(/ping, func(c *gin.Context) {//浏览器输出//c.JSON(200, gin.H{// message: pong,//})c.String(http.StatusOK, 值:%v, 你好)})//监听并在 0.0.0.0:8080 上启动服务(启动一个web服务)
r.Run()
// 监听并在 0.0.0.0:8000 上启动服务(启动一个web服务)
//r.Run(8000)
}5.运行项目go run main.go6.要改变默认启动的端口r.Run(:9000)三.golang程序的热加载所谓热加载就是当对代码进行修改时程序能够自动重新加载并执行这在开发中是非常便利的可以快速进行代码测试省去了每次手动重新编译,beego 中可以使用官方给提供bee工具来热加载项目但是 gin 中并没有官方提供的热加载工具这个时候要实现热加载就可以借助第三方的工具工具 1推荐https://github.com/gravityblast/fresh//进入终端执行
go get github.com/pilu/fresh
//然后运行命令
fresh//或者进入终端执行
go install github.com/pilu/freshlatest
//然后运行命令
fresh工具 2https://github.com/codegangsta/gin//进入终端执行
go get -u github.com/codegangsta/gin
//然后运行命令
gin run main.go四.Gin框架中的路由1.路由概述路由Routing是由一个 URI或者叫路径和一个特定的 HTTP 方法GET、POST 等组成的涉及到应用如何响应客户端对某个网站节点的访问,RESTful API 是目前比较成熟的一套互联网应用程序的 API 设计理论所以在设计路由的时候建议参考 RESTful API 指南,在 RESTful 架构中每个网址代表一种资源不同的请求方式表示执行不同的操作GETSELECT从服务器取出资源一项或多项POSTCREATE在服务器新建一个资源PUTUPDATE在服务器更新资源客户端提供改变后的完整资源DELETEDELETE从服务器删除资源简单的路由配置当用 GET 请求访问一个网址的时候r.GET(网址, func(c *gin.Context) {c.String(200, Get)
})当用 POST 访问一个网址的时候r.POST(网址, func(c *gin.Context) {c.String(200, POST)
})当用 PUT 访问一个网址的时候r.PUT(网址, func(c *gin.Context) {c.String(200, PUT)
})当用 DELETE 访问一个网址的时候r.DELETE(网址, func(c *gin.Context) {c.String(200, DELETE)
})路由里面获取 Get 传值// 域名/news?aid20
r.GET(/news, func(c *gin.Context) {aid : c.Query(aid)c.String(200, aid%s, aid)
})动态路由// 域名/user/20
r.GET(/user/:uid, func(c *gin.Context) {uid : c.Param(uid)c.String(200, userID%s, uid)
})完整的代码案例如下:package mainimport (_ fmtgithub.com/gin-gonic/ginnet/http
)func main() {r : gin.Default() // 创建gin的默认路由引擎//配置路由// 浏览器访问请求127.0.0.1:8080/ping路由时,调用回调函数r.GET(/ping, func(c *gin.Context) {//浏览器输出//c.JSON(200, gin.H{// message: pong,//})c.String(http.StatusOK, 值:%v, 你好)})r.GET(/news, func(c *gin.Context) {//使用http.StatusOK状态码c.String(http.StatusOK, 新闻页11面)})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() // 监听并在 0.0.0.0:8080 上启动服务(启动一个web服务)
}3.c.String() c.JSON() c.JSONP() c.XML() c.HTML()返回一个字符串r.GET(/news, func(c *gin.Context) {aid : c.Query(aid)c.String(200, aid%s, aid)
})返回一个 JSON 数据 //方法一:自己拼接JSONr.GET(/json, func(c *gin.Context) {//返回json数据,使用 map[string]interface//c.JSON(返回的状态码, 任意类型的数据(如:map,struct,...)c.JSON(200, map[string]interface{}{success: true,msg: 你好,})})//方法二:gin中的H函数r.GET(/json2, func(c *gin.Context) {//返回json数据,使用gin中的H函数, gin.H 是 map[string]interface{}的缩写c.JSON(200, gin.H{success: true,msg: 你好gin,})})//方法三:使用结构体r.GET(/json3, func(c *gin.Context) {//实例化一个结构体a : Article{Title: 标题,Desc: 说明,Content: 内容,}c.JSON(200, a)})JSOPN: jsonp请求 主要用来解决跨域问题 //jsonp请求 主要用来解决跨域问题//http://127.0.0.1:8080/jsonp?callbackcall//call({title:标题-jsonp,desc:说明-jsonp,content:内容-jsonp});r.GET(/jsonp, func(c *gin.Context) {//实例化一个结构体a : Article{Title: 标题-jsonp,Desc: 说明-jsonp,Content: 内容-jsonp,}c.JSONP(200, a)})返回 XML 数据 //方法一:使用gin.H返回r.GET(/xml, func(c *gin.Context) {c.XML(http.StatusOK, gin.H{success: true,msg: 成功xml,})})//方法二:使用结构体r.GET(/xmlStruct, func(c *gin.Context) {//实例化一个结构体a : Article{Title: 标题-xmlStruct,Desc: 说明-xmlStruct,Content: 内容-xmlStruct,}c.XML(200, a)})返回HTML数据 //初始化路由r : gin.Default()//加载templates文件中所有模板文件,以便后续c.HTML()渲染文件时使用r.LoadHTMLGlob(templates/*)r.GET(/news, func(c *gin.Context) {//使用模板文件渲染HTML文件//前提: r.LoadHTMLGlob(templates/*)//HTML(状态码, 要渲染的文件名, 加载的参数)c.HTML(http.StatusOK, news.html, gin.H{title: 我是一个news,})})完整代码案例如下:package mainimport (github.com/gin-gonic/ginnet/http
)type Article struct {Title string json:titleDesc string json:descContent string json:content
}func main() {//初始化路由r : gin.Default()//加载templates文件中所有模板文件,以便后续c.HTML()渲染文件时使用r.LoadHTMLGlob(templates/*)//配置路由r.GET(/, func(c *gin.Context) {c.String(200, 首页)})r.GET(/json, func(c *gin.Context) {//返回json数据,使用 map[string]interface//c.JSON(返回的状态码, 任意类型的数据(如:map,struct,...)c.JSON(200, map[string]interface{}{success: true,msg: 你好,})})r.GET(/json2, func(c *gin.Context) {//返回json数据,使用gin中的H函数c.JSON(200, gin.H{success: true,msg: 你好gin,})})r.GET(/json3, func(c *gin.Context) {//实例化一个结构体a : Article{Title: 标题,Desc: 说明,Content: 内容,}c.JSON(200, a)})//jsonp请求 主要用来解决跨域问题//http://127.0.0.1:8080/jsonp?callbackcall//call({title:标题-jsonp,desc:说明-jsonp,content:内容-jsonp});r.GET(/jsonp, func(c *gin.Context) {//实例化一个结构体a : Article{Title: 标题-jsonp,Desc: 说明-jsonp,Content: 内容-jsonp,}c.JSONP(200, a)})r.GET(/xml, func(c *gin.Context) {c.XML(http.StatusOK, gin.H{success: true,msg: 成功xml,})})r.GET(/news, func(c *gin.Context) {//使用模板文件渲染HTML文件//前提: r.LoadHTMLGlob(templates/*)//HTML(状态码, 要渲染的文件名, 加载的参数)c.HTML(http.StatusOK, news.html, gin.H{title: 我是一个news,})})r.GET(/goods, func(c *gin.Context) {//使用模板文件渲染HTML文件//前提: r.LoadHTMLGlob(templates/*)//HTML(状态码, 要渲染的文件名, 加载的参数)c.HTML(http.StatusOK, goods.html, gin.H{title: 我是一个goods,price: 12.99,})})r.Run() // 启动一个web服务
}[下一节][golang gin框架] 2.Gin HTML模板渲染以及模板语法,自定义模板函数,静态文件服务