go随聊-web框架gin

Gin Web Framework

go随聊-web框架gin     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/   结果如下:

go随聊-web框架gin

调试/非调试模式设置

gin.SetMode(gin.ReleaseMode)
gin.SetMode(gin.DebugMode)

设置静态网页路径

router.Static("/web", "d:/webroot")

/web:浏览器中输入的路径。

d:/webroot:静态网页文件在本地磁盘的路径即在d:/webroot中放入所有静态网页。

go随聊-web框架gin

注册路由

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()
	}
}

go随聊-web框架gin