服务咨询热线:

022-88711099

当前位置:

《Go语言四十二章经》第四十二章 WEB框架(Gin)

发布时间:2019-11-28 作者:李骁 访问量:1775

《Go语言四十二章经》第四十二章 WEB框架(Gin)

42.1 有关于Gin

在Go语言开发的WEB框架中,有两款著名WEB框架的命名都以酒有关:Martini( 马丁尼)和Gin(杜松子酒),由于我不擅于饮酒所以这两种酒的优劣暂不做评价,但说WEB框架相比较的话,Gin要比Martini强很多。

Gin是Go语言写的一个WEB框架,它具有运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和JSON。总之在Go语言开发领域是一款值得好好研究的WEB框架,开源网址:https://github.com/gin-gonic/gin

首先下载安装gin包:

go get -u github.com/gin-gonic/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() // listen and serve on 0.0.0.0:8080
}

编译运行程序,打开浏览器,访问 http://localhost:8080/ping
页面显示:

{"message":"pong"}

以JSON格式输出了数据。

gin的功能不只是简单输出JSON数据。它是一个轻量级的WEB框架,支持RESTful风格API,支持GET,POST,PUT,PATCH,DELETE,OPTIONS 等http方法,支持文件上传,分组路由,Multipart/Urlencoded FORM,以及支持JSONP,参数处理等等功能,这些都和WEB紧密相关,通过提供这些功能,使开发人员更方便地处理WEB业务。

42.2 Gin实际应用

接下来使用Gin作为框架来搭建一个拥有静态资源站点,动态WEB站点,以及RESTFull API接口站点(可专门作为手机APP应用提供服务使用)组成的,亦可根据情况分拆这套系统,每种功能独立出来单独提供服务。

下面按照一套系统但采用分站点来说明,首先是整个系统的目录结构,website目录下面static是资源类文件,为静态资源站点专用;photo目录是UGC上传图片目录,tpl是动态站点的模板。当然这个目录结构是一种约定,你可以根据情况来修改。整个项目已经开源,你可以访问来详细了解:https://github.com/ffhelicopter/tmm

具体每个站点的功能怎么实现呢?请看下面有关每个功能的讲述:

一:静态资源站点

一般网站开发中,我们会考虑把js,css,以及资源图片放在一起,作为静态站点部署在CDN,提升响应速度。采用Gin实现起来非常简单,当然也可以使用net/http包轻松实现,但使用Gin会更方便。

不管怎么样,使用Go开发,我们可以不用花太多时间在WEB服务环境搭建上,程序启动就直接可以提供WEB服务了。

package main

import (
	"net/http"
	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()

	// 静态资源加载,本例为css,js以及资源图片
	router.StaticFS("/public", http.Dir("D:/goproject/src/github.com/ffhelicopter/tmm/website/static"))
	router.StaticFile("/favicon.ico", "./resources/favicon.ico")

	// Listen and serve on 0.0.0.0:80
	router.Run(":80")
}

首先需要是生成一个Engine ,这是gin的核心,默认带有Logger 和 Recovery 两个中间件。

router := gin.Default()

StaticFile 是加载单个文件,而StaticFS 是加载一个完整的目录资源:

func (group *RouterGroup) StaticFile(relativePath, filepath string) IRoutes
func (group *RouterGroup) StaticFS(relativePath string, fs http