Gin Web Framework
Gin 是一个 Golang 写的 web 框架,具有高性能的优点,基于 httprouter,它提供了类似martini但更好性能(路由性能约快40倍)的API服务。自身的net/http足够简单,Gin更像是一些常用函数或者工具的集合。借助Gin开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。
https://github.com/gin-gonic/gin
安装框架
1.Download and install it:
go get -u github.com/gin-gonic/gin
2.Import it in your code:
import "github.com/gin-gonic/gin"
Hello World
import (
"testing"
"net/http"
"github.com/gin-gonic/gin"
)
func TestNewHttpChannel(t *testing.T) {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World")
})
router.Run(":8000")
}
在浏览器中输入http://127.0.0.1:8000/ 结果如下:
调试/非调试模式设置
gin.SetMode(gin.ReleaseMode)
gin.SetMode(gin.DebugMode)
设置静态网页路径
router.Static("/web", "d:/webroot")
/web:浏览器中输入的路径。
d:/webroot:静态网页文件在本地磁盘的路径即在d:/webroot中放入所有静态网页。
注册路由
gin中消息处理函数格式定义如下:
func Handler(c *gin.Context) {
}
消息处理注册:
import (
"testing"
"github.com/gin-gonic/gin"
"net/http"
)
func Handler(c *gin.Context) {
c.String(http.StatusOK, "Hello World")
}
func TestNewHttpChannel(t *testing.T) {
router := gin.Default()
//Get方式**册/test 路径处理函数为Handler
router.GET("/test",Handler)
//Post方式**册/test 路径处理函数为Handler
router.POST("/test",Handler)
router.Run(":8000")
}
消息回复
c *gin.Context
//返回json
c.JSON(http.StatusOK, json)
//返回字符串
c.String(http.StatusOK, "Hello World")
//返回图片,data是图片数据
c.Data(http.StatusOK, "image/jpeg", data)
Content-Type类型判断
contentType := c.GetHeader("Content-Type")
Body内容获取
contentType 是text/plain、application/json,即body是json格式的数据。
func Handler(c *gin.Context) {
body:= new(bytes.Buffer)
buf:= make([]byte,1024)
n,_:= c.Request.Body.Read(buf)
for n > 0 {
body.Write(buf[0:n])
n,_= c.Request.Body.Read(buf)
}
//body即使内容
body:=body.Bytes()
}
contentType 是datax-www-form-urlencoded。
func Handler(c *gin.Context) {
m:= make(map[string]interface{})
query := c.Request.URL.Query()
for k, v := range query {
if v[0]!="" {
m[k] = v[0]
}
}
req := c.Request
req.ParseForm()
req.ParseMultipartForm(32 << 20)
form := req.PostForm
for k, v := range form {
if v[0]!="" {
m[k] = v[0]
}
}
//m中保存的就是key-value值
}
启动、停止web
server *http.Server
//启动web
func StartHttp() {
router := gin.Default()
router.Static("/web", "d:/webroot")
server = &http.Server{
Addr: ":8000",
Handler: router,
}
err:= this.server.ListenAndServe()
if err != nil {
log.Infof("http info[%v]",err)
}else{
log.Info("gin close")
}
}
//停止web
func Stop() {
if this.server !=nil {
this.server.Close()
}
}
|
请发表评论