日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法_Golang

作者:可可巧克力 ? 更新時(shí)間: 2021-12-02 編程語言

go語言web框架挺多的,各有各的特點(diǎn)和風(fēng)格。我之所以在項(xiàng)目中使用gin框架,是因?yàn)轫?xiàng)目一開始是用的martini,一個(gè)設(shè)計(jì)得很好的框架,但是存在一個(gè)比較嚴(yán)重的問題,就是大量使用反射使用太多導(dǎo)致效率過低(這個(gè)問題也導(dǎo)致了程序在訪問量暴漲時(shí)內(nèi)存上漲過快的問題),而且這個(gè)框架在去年就沒有人維護(hù)了,而作者推薦使用風(fēng)格很相近的gin框架,大概看了一下,風(fēng)格確實(shí)差不多,而且效率很高,于是就用了gin。至于其它的框架,了解得比較多的是beego,項(xiàng)目中也使用了它的子項(xiàng)目beelog,但是由于我做的項(xiàng)目是偏向于應(yīng)用服務(wù),而不是網(wǎng)站服務(wù),它的風(fēng)格更適合網(wǎng)站服務(wù),因此就沒有選擇它。

貼一下這兩個(gè)框架的github倉庫,martini就不推薦了

gin
beego

下面貼一下用gin搭建一個(gè)簡(jiǎn)易的應(yīng)用服務(wù)的代碼片段,非常的簡(jiǎn)單,看一下代碼注釋也很容易理解。

package main

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

func main() {

    gin.SetMode(gin.DebugMode) //全局設(shè)置環(huán)境,此為開發(fā)環(huán)境,線上環(huán)境為gin.ReleaseMode
    router := gin.Default()    //獲得路由實(shí)例

    //添加中間件
    router.Use(Middleware)
    //注冊(cè)接口
    router.GET("/simple/server/get", GetHandler)
    router.POST("/simple/server/post", PostHandler)
    router.PUT("/simple/server/put", PutHandler)
    router.DELETE("/simple/server/delete", DeleteHandler)
    //監(jiān)聽端口
    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數(shù)據(jù),可以直接使用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命令訪問這些接口可以得到對(duì)應(yīng)的返回結(jié)果

這里寫圖片描述

程序的日志輸出

這里寫圖片描述

這里只是快速上手的一些方法,作為一個(gè)web服務(wù)框架,功能當(dāng)然非常強(qiáng)大,這就需要在實(shí)際使用中慢慢挖掘和深究了。

原文鏈接:https://blog.csdn.net/KeKeQiaoKeLi/article/details/53038557

欄目分類
最近更新