go服务端----使用gin框架搭建简易服务

来源:互联网 发布:维斯布鲁克数据库 编辑:程序博客网 时间:2024/05/21 08:54

使用gin框架搭建简易服务

go语言web框架挺多的,各有各的特点和风格。我之所以在项目中使用gin框架,是因为项目一开始是用的martini,一个设计得很好的框架,但是存在一个比较严重的问题,就是大量使用反射使用太多导致效率过低(这个问题也导致了程序在访问量暴涨时内存上涨过快的问题),而且这个框架在去年就没有人维护了,而作者推荐使用风格很相近的gin框架,大概看了一下,风格确实差不多,而且效率很高,于是就用了gin。至于其它的框架,了解得比较多的是beego,项目中也使用了它的子项目beelog,但是由于我做的项目是偏向于应用服务,而不是网站服务,它的风格更适合网站服务,因此就没有选择它。

贴一下这两个框架的github仓库,martini就不推荐了
gin
beego

下面贴一下用gin搭建一个简易的应用服务的代码片段,非常的简单,看一下代码注释也很容易理解。

package mainimport (    "fmt"    "github.com/gin-gonic/gin"    "net/http")func main() {    gin.SetMode(gin.DebugMode) //全局设置环境,此为开发环境,线上环境为gin.ReleaseMode    router := gin.Default()    //获得路由实例    //添加中间件    router.Use(Middleware)    //注册接口    router.GET("/simple/server/get", GetHandler)    router.POST("/simple/server/post", PostHandler)    router.PUT("/simple/server/put", PutHandler)    router.DELETE("/simple/server/delete", DeleteHandler)    //监听端口    http.ListenAndServe(":8005", router)}func Middleware(c *gin.Context) {    fmt.Println("this is a middleware!")}func GetHandler(c *gin.Context) {    value, exist := c.GetQuery("key")    if !exist {        value = "the key is not exist!"    }    c.Data(http.StatusOK, "text/plain", []byte(fmt.Sprintf("get success! %s\n", value)))    return}func PostHandler(c *gin.Context) {    type JsonHolder struct {        Id   int    `json:"id"`        Name string `json:"name"`    }    holder := JsonHolder{Id: 1, Name: "my name"}    //若返回json数据,可以直接使用gin封装好的JSON方法    c.JSON(http.StatusOK, holder)    return}func PutHandler(c *gin.Context) {    c.Data(http.StatusOK, "text/plain", []byte("put success!\n"))    return}func DeleteHandler(c *gin.Context) {    c.Data(http.StatusOK, "text/plain", []byte("delete success!\n"))    return}

用curl命令访问这些接口可以得到对应的返回结果
这里写图片描述

程序的日志输出
这里写图片描述

这里只是快速上手的一些方法,作为一个web服务框架,功能当然非常强大,这就需要在实际使用中慢慢挖掘和深究了。

0 0
原创粉丝点击