欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

go語(yǔ)言框架使用,go開(kāi)發(fā)常用框架

go語(yǔ)言框架gin之集成swagger

1.先安裝Go對(duì)應(yīng)的開(kāi)源Swagger相關(guān)的庫(kù)

創(chuàng)新新互聯(lián),憑借十年的網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗(yàn),本著真心·誠(chéng)心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計(jì)網(wǎng)站有成百上千案例。做網(wǎng)站建設(shè),選成都創(chuàng)新互聯(lián)公司。

go get?github.com/swaggo/swag/cmd/swag

go get github.com/swaggo/gin-swagger

go get?github.com/swaggo/files

go get?github.com/alecthomas/template

2.驗(yàn)證是否安裝成功:swag -v

3.針對(duì)接口寫入注解

// @Summary 獲取多個(gè)標(biāo)簽

// @Tags 標(biāo)簽

// @Produce? json

// @Param name query string false "標(biāo)簽名稱" maxlength(100)

// @Param state query int false "狀態(tài)" Enums(0, 1) default(1)

// @Param page query int false "頁(yè)碼"

// @Param page_size query int false "每頁(yè)數(shù)量"

// @Success 200 {object} model.TagSwagger "成功"

// @Failure 400 {object} errcode.Error "請(qǐng)求錯(cuò)誤"

// @Failure 500 {object} errcode.Error "內(nèi)部錯(cuò)誤"

// @Router /api/v1/tags [get]

func (t Tag) List(c *gin.Context) {

}

// @Summary 新增標(biāo)簽

// @Tags 標(biāo)簽

// @Produce? json

// @Param name body string true "標(biāo)簽名稱" minlength(3) maxlength(100)

// @Param state body int false "狀態(tài)" Enums(0, 1) default(1)

// @Param created_by body string false "創(chuàng)建者" minlength(3) maxlength(100)

// @Success 200 {object} model.Tag "成功"

// @Failure 400 {object} errcode.Error "請(qǐng)求錯(cuò)誤"

// @Failure 500 {object} errcode.Error "內(nèi)部錯(cuò)誤"

// @Router /api/v1/tags [post]

func (t Tag) Create(c *gin.Context) {

}

// @Summary 更新標(biāo)簽

// @Tags 標(biāo)簽

// @Produce? json

// @Param id path int true "標(biāo)簽ID"

// @Param name body string false "標(biāo)簽名稱" minlength(3) maxlength(100)

// @Param state body int false "狀態(tài) (0為未刪除、1為已刪除)" Enums(0, 1) default(1)

// @Param modified_by body string true "修改者" minlength(3) maxlength(100)

// @Success 200 {array} model.Tag "成功"

// @Failure 400 {object} errcode.Error "請(qǐng)求錯(cuò)誤"

// @Failure 500 {object} errcode.Error "內(nèi)部錯(cuò)誤"

// @Router /api/v1/tags/{id} [put]

func (t Tag) Update(c *gin.Context) {

}

4.針對(duì)整個(gè)項(xiàng)目進(jìn)行注解,直接在main方法寫入如下注解

//@title 項(xiàng)目名稱

//@version 1.0

//@description 這里是描述

func main() {

5.生成執(zhí)行 swag init

這時(shí)會(huì)在我項(xiàng)目的docs文件夾下面生成docs.go、swagger.json、swagger.yaml三個(gè)文件

6.要在routers中進(jìn)行默認(rèn)初始化和注冊(cè)對(duì)應(yīng)的路由:

r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

同時(shí)要引用 _"blog-service/docs" ,不然會(huì)報(bào)錯(cuò)

7.查看接口文檔 :

8.ok,完成

golang反射框架Fx

Fx是一個(gè)golang版本的依賴注入框架,它使得golang通過(guò)可重用、可組合的模塊化來(lái)構(gòu)建golang應(yīng)用程序變得非常容易,可直接在項(xiàng)目中添加以下內(nèi)容即可體驗(yàn)Fx效果。

Fx是通過(guò)使用依賴注入的方式替換了全局通過(guò)手動(dòng)方式來(lái)連接不同函數(shù)調(diào)用的復(fù)雜度,也不同于其他的依賴注入方式,F(xiàn)x能夠像普通golang函數(shù)去使用,而不需要通過(guò)使用struct標(biāo)簽或內(nèi)嵌特定類型。這樣使得Fx能夠在很多go的包中很好的使用。

接下來(lái)會(huì)提供一些Fx的簡(jiǎn)單demo,并說(shuō)明其中的一些定義。

1、一般步驟

大致的使用步驟就如下。下面會(huì)給出一些完整的demo

2、簡(jiǎn)單demo

將io.reader與具體實(shí)現(xiàn)類關(guān)聯(lián)起來(lái)

輸出:

3、使用struct參數(shù)

前面的使用方式一旦需要進(jìn)行注入的類型過(guò)多,可以通過(guò)struct參數(shù)方式來(lái)解決

輸出

如果通過(guò)Provide提供構(gòu)造函數(shù)是生成相同類型會(huì)有什么問(wèn)題?換句話也就是相同類型擁有多個(gè)值呢?

下面兩種方式就是來(lái)解決這樣的問(wèn)題。

4、使用struct參數(shù)+Name標(biāo)簽

在Fx未使用Name或Group標(biāo)簽時(shí)不允許存在多個(gè)相同類型的構(gòu)造函數(shù),一旦存在會(huì)觸發(fā)panic。

輸出

上面通過(guò)Name標(biāo)簽即可完成在Fx容器注入相同類型

5、使用struct參數(shù)+Group標(biāo)簽

使用group標(biāo)簽同樣也能完成上面的功能

輸出

基本上Fx簡(jiǎn)單應(yīng)用在上面的例子也做了簡(jiǎn)單講解

1、Annotated(位于annotated.go文件) 主要用于采用annotated的方式,提供Provide注入類型

源碼中Name和Group兩個(gè)字段與前面提到的Name標(biāo)簽和Group標(biāo)簽是一樣的,只能選其一使用

2、App(位于app.go文件) 提供注入對(duì)象具體的容器、LiftCycle、容器的啟動(dòng)及停止、類型變量及實(shí)現(xiàn)類注入和兩者映射等操作

至于Provide和Populate的源碼相對(duì)比較簡(jiǎn)單易懂在這里不在描述

具體源碼

3、Extract(位于extract.go文件)

主要用于在application啟動(dòng)初始化過(guò)程通過(guò)依賴注入的方式將容器中的變量值來(lái)填充給定的struct,其中target必須是指向struct的指針,并且只能填充可導(dǎo)出的字段(golang只能通過(guò)反射修改可導(dǎo)出并且可尋址的字段),Extract將被Populate代替。 具體源碼

4、其他

諸如Populate是用來(lái)替換Extract的,而LiftCycle和inout.go涉及內(nèi)容比較多后續(xù)會(huì)單獨(dú)提供專屬文件說(shuō)明。

在Fx中提供的構(gòu)造函數(shù)都是惰性調(diào)用,可以通過(guò)invocations在application啟動(dòng)來(lái)完成一些必要的初始化工作:fx.Invoke(function); 通過(guò)也可以按需自定義實(shí)現(xiàn)LiftCycle的Hook對(duì)應(yīng)的OnStart和OnStop用來(lái)完成手動(dòng)啟動(dòng)容器和關(guān)閉,來(lái)滿足一些自己實(shí)際的業(yè)務(wù)需求。

Fx框架源碼解析

主要包括app.go、lifecycle.go、annotated.go、populate.go、inout.go、shutdown.go、extract.go(可以忽略,了解populate.go)以及輔助的internal中的fxlog、fxreflect、lifecycle

go語(yǔ)言web框架beego安裝(go mod方式)

go語(yǔ)言web框架beego安裝(go mod方式)_不忘初心,方得始終-CSDN博客

重要:將bee命令放到GOROOT/bin目錄下,這步很關(guān)鍵

cp bee /usr/local/go/bin/

注:或者可以將GOPATH/bin設(shè)置為環(huán)境變量

echo ’export PATH=" PATH"' ~/.bashrc

source ~/.bashrc

router路由下方法名要大寫,訪問(wèn)權(quán)限

wq保存

生效環(huán)境變量: source /etc/profile

go build -o abc.exe可指定編譯后的文件名

Golang常用環(huán)境變量說(shuō)明與設(shè)置詳解

環(huán)境變量GOBIN表示我們開(kāi)發(fā)程序編譯后二進(jìn)制命令的安裝目錄。

當(dāng)我們使用go install命令編譯和打包應(yīng)用程序時(shí),該命令會(huì)將編譯后二進(jìn)制程序打包GOBIN目錄,一般我們將GOBIN設(shè)置為GOPATH/bin目錄。

export GOBIN=$GOPATH/bin

Go get包管理mod

windows下默認(rèn)項(xiàng)目路徑在go安裝目錄的src下(beego)

GoLang -- Gin框架

? 何為框架:

框架一直是敏捷開(kāi)發(fā)中的利器,能讓開(kāi)發(fā)者很快的上手并做出應(yīng)用,甚至有的時(shí)候,脫離了框架,一些開(kāi)發(fā)者都不會(huì)寫程序了。成長(zhǎng)總不會(huì)一蹴而就,從寫出程序獲取成就感,再到精通框架,快速構(gòu)造應(yīng)用,當(dāng)這些方面都得心應(yīng)手的時(shí)候,可以嘗試改造一些框架,或是自己創(chuàng)造一個(gè)。

Gin是一個(gè)golang的微框架,封裝比較優(yōu)雅,API友好,源碼注釋比較明確,已經(jīng)發(fā)布了1.0版本。具有快速靈活,容錯(cuò)方便等特點(diǎn)。其實(shí)對(duì)于golang而言,web框架的依賴要遠(yuǎn)比Python,Java之類的要小。自身的net/http足夠簡(jiǎn)單,性能也非常不錯(cuò)??蚣芨袷且恍┏S煤瘮?shù)或者工具的集合。借助框架開(kāi)發(fā),不僅可以省去很多常用的封裝帶來(lái)的時(shí)間,也有助于團(tuán)隊(duì)的編碼風(fēng)格和形成規(guī)范。

(1)首先需要安裝,安裝比較簡(jiǎn)單,使用go get即可

go get github.com/gin-gonic/gin

如果安裝失敗,直接去Github clone下來(lái),放置到對(duì)應(yīng)的目錄即可。

(2)代碼中使用:

下面是一個(gè)使用Gin的簡(jiǎn)單例子:

package main

import (

"github.com/gin-gonic/gin"

)

func main() {

router := gin.Default()

router.GET("/ping", func(c *gin.Context) {

c.JSON(200, gin.H{

"message": "pong",

})

})

router.Run(":8080") // listen and serve on 0.0.0.0:8080

}

簡(jiǎn)單幾行代碼,就能實(shí)現(xiàn)一個(gè)web服務(wù)。使用gin的Default方法創(chuàng)建一個(gè)路由handler。然后通過(guò)HTTP方法綁定路由規(guī)則和路由函數(shù)。不同于net/http庫(kù)的路由函數(shù),gin進(jìn)行了封裝,把request和response都封裝到gin.Context的上下文環(huán)境。最后是啟動(dòng)路由的Run方法監(jiān)聽(tīng)端口。麻雀雖小,五臟俱全。當(dāng)然,除了GET方法,gin也支持POST,PUT,DELETE,OPTION等常用的restful方法。

Gin可以很方便的支持各種HTTP請(qǐng)求方法以及返回各種類型的數(shù)據(jù),詳情可以前往查看。

2.1 匹配參數(shù)

我們可以使用Gin框架快速的匹配參數(shù),如下代碼所示:

冒號(hào):加上一個(gè)參數(shù)名組成路由參數(shù)??梢允褂胏.Param的方法讀取其值。當(dāng)然這個(gè)值是字串string。諸如/user/rsj217,和/user/hello都可以匹配,而/user/和/user/rsj217/不會(huì)被匹配。

瀏覽器輸入以下測(cè)試:

返回結(jié)果為:

其中c.String是gin.Context下提供的方法,用來(lái)返回字符串。

其中c.Json是gin.Context下提供的方法,用來(lái)返回Json。

下面我們使用以下gin提供的Group函數(shù),方便的為不同的API進(jìn)行分類。

我們創(chuàng)建了一個(gè)gin的默認(rèn)路由,并為其分配了一個(gè)組 v1,監(jiān)聽(tīng)hello請(qǐng)求并將其路由到視圖函數(shù)HelloPage,最后綁定到 0.0.0.0:8000

C.JSON是Gin實(shí)現(xiàn)的返回json數(shù)據(jù)的內(nèi)置方法,包含了2個(gè)參數(shù),狀態(tài)碼和返回的內(nèi)容。http.StatusOK代表返回狀態(tài)碼為200,正文為{"message": “welcome"}。

注:Gin還包含更多的返回方法如c.String, c.HTML, c.XML等,請(qǐng)自行了解??梢苑奖愕姆祷豀TML數(shù)據(jù)

我們?cè)谥暗慕Mv1路由下新定義一個(gè)路由:

下面我們?cè)L問(wèn)

可以看到,通過(guò)c.Param(“key”)方法,Gin成功捕獲了url請(qǐng)求路徑中的參數(shù)。同理,gin也可以捕獲常規(guī)參數(shù),如下代碼所示:

在瀏覽器輸入以下代碼:

通過(guò)c.Query(“key”)可以成功接收到url參數(shù),c.DefaultQuery在參數(shù)不存在的情況下,會(huì)由其默認(rèn)值代替。

我們還可以為Gin定義一些默認(rèn)路由:

這時(shí)候,我們?cè)L問(wèn)一個(gè)不存在的頁(yè)面:

返回如下所示:

下面我們測(cè)試在Gin里面使用Post

在測(cè)試端輸入:

附帶發(fā)送的數(shù)據(jù),測(cè)試即可。記住需要使用POST方法.

繼續(xù)修改,將PostHandler的函數(shù)修改如下

測(cè)試工具輸入:

發(fā)送的內(nèi)容輸入:

返回結(jié)果如下:

備注:此處需要指定Content-Type為application/x-www-form-urlencoded,否則識(shí)別不出來(lái)。

一定要選擇對(duì)應(yīng)的PUT或者DELETE方法。

Gin框架快速的創(chuàng)建路由

能夠方便的創(chuàng)建分組

支持url正則表達(dá)式

支持參數(shù)查找(c.Param c.Query c.PostForm)

請(qǐng)求方法精準(zhǔn)匹配

支持404處理

快速的返回給客戶端數(shù)據(jù),常用的c.String c.JSON c.Data

Go微服務(wù)--常見(jiàn)的微服務(wù)框架

近幾年誕生了很多微服務(wù)框架,比如JAVA的Spring Cloud、Dubbo;Golang的GoKit和GoMicro以及NodeJs的Seneca。幾乎每種主流語(yǔ)言都有其對(duì)應(yīng)的微服務(wù)框架。

Go在微服務(wù)框架中有其獨(dú)特的優(yōu)勢(shì),至于優(yōu)勢(shì)在哪,自行g(shù)oogle。

1、GoKit框架

這是一個(gè)工具包的集合,可以幫助攻城獅構(gòu)建強(qiáng)大、可靠和可維護(hù)的微服務(wù)。提供了用于實(shí)現(xiàn)系統(tǒng)監(jiān)控和彈性模式組件的庫(kù),例如日志、跟蹤、限流、熔斷等。

基于這個(gè)框架的應(yīng)用程序架構(gòu)由三個(gè)主要的部分組成:

傳輸層:用于網(wǎng)絡(luò)通信,服務(wù)通常使用HTTP或者gRPC等網(wǎng)絡(luò)傳輸協(xié)議,或者使用NATS等發(fā)布訂閱系統(tǒng)相互通信。

接口層:是服務(wù)器和客戶端的基本構(gòu)建塊。每個(gè)對(duì)外提供的接口方法都會(huì)定義為一個(gè)Endpoint,一遍在服務(wù)器和客戶端之間進(jìn)行網(wǎng)絡(luò)通信,每個(gè)端點(diǎn)使用傳輸層通過(guò)HTTP或gRPC等具體通信模式對(duì)外提供服務(wù)

服務(wù)成:具體的業(yè)務(wù)邏輯實(shí)現(xiàn)

2、GoMicro框架

這是一個(gè)基于Go語(yǔ)言實(shí)現(xiàn)的插件化RPC微服務(wù)框架。提供了服務(wù)發(fā)現(xiàn)、負(fù)載均衡、同步傳輸、異步通信以及事件驅(qū)動(dòng)等機(jī)制,嘗試簡(jiǎn)化分布式系統(tǒng)之間的通信,讓開(kāi)發(fā)者更專注于自身業(yè)務(wù)邏輯的開(kāi)發(fā)。

GoMicro的設(shè)計(jì)哲學(xué)是可插拔的架構(gòu)理念,提供了可快速構(gòu)建系統(tǒng)的組件,并且可以根據(jù)自身的需求對(duì)GoMicro提供的默認(rèn)實(shí)現(xiàn)進(jìn)行定制。所有插件都可在倉(cāng)庫(kù)github.com/micro/go-plugins 中找到。

分享題目:go語(yǔ)言框架使用,go開(kāi)發(fā)常用框架
標(biāo)題URL:http://aaarwkj.com/article0/dsieeoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站內(nèi)鏈、域名注冊(cè)、小程序開(kāi)發(fā)ChatGPT、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
日韩中字伦理熟妇人妻| 亚洲一本一道久久香蕉| 国产欧美一区二区三区久久 | 精品人妻少妇免费久久蜜臀av| 国产欧美日韩综合一区| 日本a级片免费在线观看| 中文字幕中文字幕久久不卡| 欧美亚洲另类麻豆综合在线| 日韩精品精美视频在线观看 | 欧美亚洲国产另类第一页| 免费在线观看福利av| 漂亮人妻少妇中文字幕| 91亚洲熟妇国产熟妇肥婆| 国产原创剧情av网址| 国产精品久久久久久老熟女| 国产美女被狂操到高潮| 欧美福利免费在线视频| 日本高清有码中文字幕| 精品国产不卡在线观看| 国产成人亚洲精品乱码| 国产午夜精品自拍视频| 91午夜福利视频在线观看| 亚洲av产在线精品亚洲第| 国产一区二区日本在线| 亚洲三级黄片免费播放| 国产伦精品一区二区三区免费视频 | 日韩国产精品视频二区| 中文字幕日韩精品久久| 中文字幕在线一区国产精品| 国外男女性生活在线视频| 后入视频国产在线观看| 国产av一区最新精品麻豆| 在线日韩观看免费av| 天天干夜夜操天天射| 国产黄色片网站在线观看| 亚洲综合香蕉在线视频| 欧美成人日本在线播放| 日韩中文字幕视频久久| 日产精品一级二级三级爱| 日韩天堂视频在线播放| 日韩一二卡在线观看视频|