使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法
go語(yǔ)言web框架挺多的,各有各的特點(diǎn)和風(fēng)格。我之所以在項(xiàng)目中使用gin框架,是因?yàn)轫?xiàng)目一開(kāi)始是用的martini,一個(gè)設(shè)計(jì)得很好的框架,但是存在一個(gè)比較嚴(yán)重的問(wèn)題,就是大量使用反射使用太多導(dǎo)致效率過(guò)低(這個(gè)問(wèn)題也導(dǎo)致了程序在訪問(wèn)量暴漲時(shí)內(nèi)存上漲過(guò)快的問(wèn)題),而且這個(gè)框架在去年就沒(méi)有人維護(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ù),因此就沒(méi)有選擇它。
貼一下這兩個(gè)框架的github倉(cāng)庫(kù),martini就不推薦了
下面貼一下用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)境,此為開(kāi)發(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)聽(tīng)端口
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命令訪問(wèn)這些接口可以得到對(duì)應(yīng)的返回結(jié)果

程序的日志輸出

這里只是快速上手的一些方法,作為一個(gè)web服務(wù)框架,功能當(dāng)然非常強(qiáng)大,這就需要在實(shí)際使用中慢慢挖掘和深究了。
到此這篇關(guān)于使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)gin框架搭建簡(jiǎn)易服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang設(shè)計(jì)模式之單例模式詳細(xì)講解
單例模式很容易記住。就像名稱一樣,它只能提供對(duì)象的單一實(shí)例,保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)該實(shí)例的方法。本文就來(lái)聊聊Go語(yǔ)言中的單例模式,感興趣的小伙伴可以了解一下2023-01-01
Golang使用cobra實(shí)現(xiàn)命令行程序的示例代碼
Cobra 是 Go 語(yǔ)言中一個(gè)強(qiáng)大的命令行應(yīng)用庫(kù),它提供了創(chuàng)建命令行工具所需的基本結(jié)構(gòu)和功能,被許多開(kāi)發(fā)者用于構(gòu)建各種命令行工具和應(yīng)用程序,本文將給大家介紹Golang使用cobra實(shí)現(xiàn)命令行程序,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
Go?for-range?的?value值地址每次都一樣的原因解析
循環(huán)語(yǔ)句是一種常用的控制結(jié)構(gòu),在?Go?語(yǔ)言中,除了?for?關(guān)鍵字以外,還有一個(gè)?range?關(guān)鍵字,可以使用?for-range?循環(huán)迭代數(shù)組、切片、字符串、map?和?channel?這些數(shù)據(jù)類型,這篇文章主要介紹了Go?for-range?的?value值地址每次都一樣的原因解析,需要的朋友可以參考下2023-05-05
Golang中的select語(yǔ)句及其應(yīng)用實(shí)例
本文將介紹Golang中的select語(yǔ)句的使用方法和作用,并通過(guò)代碼示例展示其在并發(fā)編程中的實(shí)際應(yīng)用,此外,還提供了一些與select相關(guān)的面試題,幫助讀者更好地理解和應(yīng)用select語(yǔ)句2023-12-12

