欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語言的命令行框架詳解 go語言orm框架

「測(cè)試開發(fā)全棧化-Go」(1) Go語言基本了解

作為一個(gè)測(cè)試,作為一個(gè)測(cè)試開發(fā), 全棧化+管理 是我們未來的發(fā)展方向。已經(jīng)掌握了Java、Python、HTML的你,是不是也想了解下最近異常火爆的Go語言呢?來吧,讓我們一起了解下。

創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)玉州,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

Go 是一個(gè)開源的編程語言 ,它能讓構(gòu)造簡(jiǎn)單、可靠且高效的軟件變得容易。

Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā),后來還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時(shí)候發(fā)布了Go 1穩(wěn)定版本。現(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個(gè)活躍的社區(qū)。這三個(gè)人都是計(jì)算機(jī)界的大神,有的參與了C語言的編寫,有的還是數(shù)學(xué)大神,有的還獲得了計(jì)算機(jī)最高榮譽(yù)-圖靈獎(jiǎng)。

接下來說說 Go語言的特色 :

簡(jiǎn)潔、快速、安全

并行、有趣、開源

內(nèi)存管理、數(shù)組安全、編譯迅速

Go語言的用途 :

Go 語言被設(shè)計(jì)成一門應(yīng)用于搭載 Web 服務(wù)器,存儲(chǔ)集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言。

對(duì)于高性能分布式系統(tǒng)領(lǐng)域而言,Go 語言無疑比大多數(shù)其它語言有著更高的開發(fā)效率。它提供了海量并行的支持,這對(duì)于 游戲 服務(wù)端的開發(fā)而言是再好不過了。

Go語言的環(huán)境安裝:

建議直接打開 官方地址因?yàn)閴Φ脑虼虿婚_

因?yàn)槲矣玫氖莣indows系統(tǒng),這里主要講下Windows系統(tǒng)上使用Go語言來編程。

Windows 下可以使用 .msi 后綴(在下載列表中可以找到該文件,如go1.17.2.windows-amd64.msi)的安裝包來安裝。

默認(rèn)情況下 .msi 文件會(huì)安裝在 c:Go 目錄下。你可以將 c:Gobin 目錄添加到 Path 環(huán)境變量中。添加后你需要重啟命令窗口才能生效。個(gè)人建議還是安裝到 Program Files文件夾中。

使用什么開發(fā)工具來對(duì)Go語言進(jìn)行編寫:

個(gè)人建議用VS code, 也可以用Sublime Text來編輯。如果你之前看了我講的HTML語言的學(xué)習(xí),肯定已經(jīng)下載了VS code. 那么這時(shí)你需要在VS code中下載Go語言的擴(kuò)展插件。

這里有一個(gè)巨大的坑,就是在下載Go的插件和依賴包時(shí),會(huì)提示一些包沒有。主要是因?yàn)橄螺d的依賴包部分被墻了,只能想別的辦法去下載。

建議參考網(wǎng)頁:

解決vscode中g(shù)olang插件安裝失敗方法

在學(xué)習(xí)go的過程中,使用的是vscode,但是一直提示安裝相關(guān)插件失敗,然后上網(wǎng)查方法,基本上是叫你建立golang.org目錄什么的,結(jié)果全是錯(cuò)的,而且都是抄襲,很煩。無意之中看到一位博主分享的方法,他也是飽受上述的垃圾博文困擾,然后找到了解決方法,這里向他致敬,秉著讓更多人看到正確解決方法的心,我寫下正確的解決方法,希望對(duì)你有所幫助,也可以點(diǎn)開原博主鏈接參考:

Go有一個(gè)全球模塊代理,設(shè)置代理再去安裝golang的插件,就可以安裝成功了。步驟有,首先Windows用戶打開Powershell,一個(gè)藍(lán)色的界面,注意不是cmd!不知道的直接打開window下面的搜索,然后輸入powershell,搜索出來就可以了。

$env:GO111MODULE=“on”

$env:GOPROXY=“”

go env -w GOPROXY=

go env -w GOPRIVATE=*.corp.example.com

然后我們打開VsCode界面,下面會(huì)提示安裝插件,我們選擇Install ALL,就會(huì)安裝成功

當(dāng)你在運(yùn)行Go語言程序時(shí),提示所有的插件包都已經(jīng)安裝成功了時(shí),就可以正常使用了,要不然一堆報(bào)錯(cuò)會(huì)讓你非常心煩。

好了,今天先到這里,晚安、下班~

go語言框架gin之集成swagger

1.先安裝Go對(duì)應(yīng)的開源Swagger相關(guā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 "頁碼"

// @Param page_size query int false "每頁數(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,完成

寫命令行應(yīng)用程序什么不可或缺?Go可以這樣處理命令行參數(shù)

Go語言內(nèi)置的flag包實(shí)現(xiàn)了命令行參數(shù)的解析,flag包使得開發(fā)命令行工具更為簡(jiǎn)單。

如果你只是簡(jiǎn)單的想要獲取命令行參數(shù),可以像下面的代碼示例一樣使用os.Args來獲取命令行參數(shù)。

將上面的代碼執(zhí)行g(shù)o build -o "args_demo"編譯之后,執(zhí)行:

os.Args是一個(gè)存儲(chǔ)命令行參數(shù)的字符串切片,它的第一個(gè)元素是執(zhí)行文件的名稱。

本文介紹了flag包的常用函數(shù)和基本用法,更詳細(xì)的內(nèi)容請(qǐng)查看官方文檔。

flag包支持的命令行參數(shù)類型有bool、int、int64、uint、uint64、float float64、string、duration。

有以下兩種常用的定義命令行flag參數(shù)的方法。

基本格式如下:

flag.Type(flag名, 默認(rèn)值, 幫助信息)*Type 例如我們要定義姓名、年齡、婚否三個(gè)命令行參數(shù),我們可以按如下方式定義:

需要注意的是,此時(shí)name、age、married、delay均為對(duì)應(yīng)類型的指針。

基本格式如下: flag.TypeVar(Type指針, flag名, 默認(rèn)值, 幫助信息) 例如我們要定義姓名、年齡、婚否三個(gè)命令行參數(shù),我們可以按如下方式定義:

通過以上兩種方法定義好命令行flag參數(shù)后,需要通過調(diào)用flag.Parse()來對(duì)命令行參數(shù)進(jìn)行解析。

支持的命令行參數(shù)格式有以下幾種:

其中,布爾類型的參數(shù)必須使用等號(hào)的方式指定。

Flag解析在第一個(gè)非flag參數(shù)(單個(gè)”-“不是flag參數(shù))之前停止,或者在終止符”–“之后停止。

定義

使用

命令行參數(shù)使用提示:

$ ./flag_demo -help

Usage of ./flag_demo:

-age int

年齡 (default 18)

-d duration

時(shí)間間隔

-married

婚否

-name string

姓名 (default "張三")

正常使用命令行flag參數(shù):

使用非flag命令行參數(shù):

原文鏈接:

Go語言命令行利器cobra使用教程

cobra是一個(gè)提供簡(jiǎn)單接口來創(chuàng)建強(qiáng)大的現(xiàn)代CLI界面的庫類似git git tools,cobra也是一個(gè)應(yīng)用程序,它會(huì)生成你的應(yīng)用程序的腳手架來快速開發(fā)基于cobra的應(yīng)用程序

cobra提供:

cobra建立在命令、參數(shù)、標(biāo)志的結(jié)構(gòu)之上

commands代表動(dòng)作,args是事物,flags是動(dòng)作的修飾符

最好的應(yīng)用程序在使用時(shí)讀起來就像句子,因此,用戶直觀地知道如何與它們交互

模式如下:APPNAME VERB NOUN --ADJECTIVE. or APPNAME COMMAND ARG --FLAG(APPNAME 動(dòng)詞 名詞 形容詞 或者 APPNAME 命令 參數(shù) 標(biāo)志)

一些真實(shí)世界的好例子可以更好地說明這一點(diǎn)

kubectl 命令更能體現(xiàn)APPNAME 動(dòng)詞 名詞 形容詞

如下的例子,server 是command,port是flag

這個(gè)命令中,我們告訴git 克隆url

命令是應(yīng)用程序的中心點(diǎn),應(yīng)用程序支持的每一個(gè)交互都包含在一個(gè)命令中,命令可以有子命令,也可以運(yùn)行操作

在上面的例子中,server是命令

更多關(guān)于cobra.Command

flag是一種修改命令行為的方式,cobra支持完全兼容POSIX標(biāo)志,也支持go flag package,cobra可以定義到子命令上的標(biāo)志,也可以僅對(duì)該命令可用的標(biāo)志

在上面的命令中,port是標(biāo)志

標(biāo)志的功能由 pflag library 提供,pflag library是flag標(biāo)準(zhǔn)庫的一個(gè)分支,在添加POSIX兼容性的同時(shí)維護(hù)相同的接口。

使用cobra很簡(jiǎn)單,首先,使用go get按照最新版本的庫,這個(gè)命令會(huì)安裝cobra可執(zhí)行程序以及庫和依賴項(xiàng)

下一步,引入cobra到應(yīng)用程序中

雖然歡迎您提供自己的組織,但通常基于Cobra的應(yīng)用程序?qū)⒆裱韵陆M織結(jié)構(gòu):

在Cobra應(yīng)用程序中,main.go文件通常非常簡(jiǎn)單。它有一個(gè)目的:初始化Cobra。

使用cobra生成器

cobra提供了程序用來創(chuàng)建你的應(yīng)用程序然后添加你想添加的命令,這是將cobra引入應(yīng)用程序最簡(jiǎn)單的方式

這兒 你可以發(fā)現(xiàn)關(guān)于cobra的更多信息

要手動(dòng)實(shí)現(xiàn)cobra,需要?jiǎng)?chuàng)建一個(gè)main.go 和rootCmd文件,可以根據(jù)需要提供其他命令

Cobra不需要任何特殊的構(gòu)造器。只需創(chuàng)建命令。

理想情況下,您可以將其放在app/cmd/root.go中:

在init()函數(shù)中定義標(biāo)志和處理配置

例子如下,cmd/root.go:

創(chuàng)建main.go

使用root命令,您需要讓主函數(shù)執(zhí)行它。為清楚起見,Execute應(yīng)該在根目錄下運(yùn)行,盡管它可以在任何命令上調(diào)用。

在Cobra應(yīng)用程序中,main.go文件通常非常簡(jiǎn)單。它有一個(gè)目的:初始化Cobra。

可以定義其他命令,通常每個(gè)命令在cmd/目錄中都有自己的文件。

如果要?jiǎng)?chuàng)建版本命令,可以創(chuàng)建cmd/version.go并用以下內(nèi)容填充它:

如果希望將錯(cuò)誤返回給命令的調(diào)用者,可以使用RunE。

然后可以在execute函數(shù)調(diào)用中捕獲錯(cuò)誤。

標(biāo)志提供修飾符來控制操作命令的操作方式。

由于標(biāo)志是在不同的位置定義和使用的,因此我們需要在外部定義一個(gè)具有正確作用域的變量來分配要使用的標(biāo)志。

有兩種不同的方法來分配標(biāo)志。

標(biāo)志可以是“持久”的,這意味著該標(biāo)志將可用于分配給它的命令以及該命令下的每個(gè)命令。對(duì)于全局標(biāo)志,在根上指定一個(gè)標(biāo)志作為持久標(biāo)志。

也可以在本地分配一個(gè)標(biāo)志,該標(biāo)志只應(yīng)用于該特定命令。

默認(rèn)情況下,Cobra只解析目標(biāo)命令上的本地標(biāo)志,而忽略父命令上的任何本地標(biāo)志。通過啟用Command.TraverseChildren,Cobra將在執(zhí)行目標(biāo)命令之前解析每個(gè)命令上的本地標(biāo)志。

使用viper綁定標(biāo)志

在本例中,持久標(biāo)志author與viper綁定。注意:當(dāng)用戶未提供--author標(biāo)志時(shí),變量author將不會(huì)設(shè)置為config中的值。

更多關(guān)于 viper的文檔

Flags默認(rèn)是可選的,如果希望命令在未設(shè)置標(biāo)志時(shí)報(bào)告錯(cuò)誤,請(qǐng)根據(jù)需要進(jìn)行標(biāo)記:

持久性Flags

可以使用命令的Args字段指定位置參數(shù)的驗(yàn)證。

內(nèi)置了以下驗(yàn)證器:

在下面的示例中,我們定義了三個(gè)命令。兩個(gè)是頂級(jí)命令,一個(gè)(cmdTimes)是頂級(jí)命令之一的子命令。在這種情況下,根是不可執(zhí)行的,這意味著需要一個(gè)子命令。這是通過不為“rootCmd”提供“Run”來實(shí)現(xiàn)的。

我們只為一個(gè)命令定義了一個(gè)標(biāo)志。

有關(guān)標(biāo)志的更多文檔,請(qǐng)?jiān)L問

對(duì)于一個(gè)更完整的例子更大的應(yīng)用程序,請(qǐng)檢查 Hugo 。

當(dāng)您有子命令時(shí),Cobra會(huì)自動(dòng)將help命令添加到應(yīng)用程序中。當(dāng)用戶運(yùn)行“應(yīng)用程序幫助”時(shí),將調(diào)用此函數(shù)。此外,help還支持所有其他命令作為輸入。例如,您有一個(gè)名為“create”的命令,沒有任何附加配置;調(diào)用“app help create”時(shí),Cobra將起作用。每個(gè)命令都會(huì)自動(dòng)添加“-help”標(biāo)志。

以下輸出由Cobra自動(dòng)生成。除了命令和標(biāo)志定義之外,不需要任何東西。

幫助就像其他命令一樣。它周圍沒有特殊的邏輯或行為。事實(shí)上,你可以提供你想提供的。

您可以為默認(rèn)命令提供自己的幫助命令或模板,以用于以下功能:

當(dāng)用戶提供無效的標(biāo)志或無效的命令時(shí),Cobra通過向用戶顯示“用法”來響應(yīng)。

你可以從上面的幫助中認(rèn)識(shí)到這一點(diǎn)。這是因?yàn)槟J(rèn)幫助將用法作為其輸出的一部分嵌入。

您可以提供自己的使用函數(shù)或模板供Cobra使用。與幫助一樣,函數(shù)和模板也可以通過公共方法重寫:

如果在root命令上設(shè)置了version字段,Cobra會(huì)添加一個(gè)頂級(jí)的'--version'標(biāo)志。運(yùn)行帶有“-version”標(biāo)志的應(yīng)用程序?qū)⑹褂冒姹灸0鍖姹敬蛴〉綐?biāo)準(zhǔn)輸出。可以使用cmd.SetVersionTemplate(s string)函數(shù)自定義模板。

可以在命令的主運(yùn)行函數(shù)之前或之后運(yùn)行函數(shù)。PersistentPreRun和PreRun函數(shù)將在運(yùn)行之前執(zhí)行。PersistentPostRun和PostRun將在運(yùn)行后執(zhí)行。如果子函數(shù)不聲明自己的函數(shù),則它們將繼承Persistent*Run函數(shù)。這些函數(shù)按以下順序運(yùn)行:

輸出:

當(dāng)發(fā)生“未知命令”錯(cuò)誤時(shí),Cobra將打印自動(dòng)建議。這使得Cobra在發(fā)生拼寫錯(cuò)誤時(shí)的行為類似于git命令。例如:

基于注冊(cè)的每個(gè)子命令和Levenshtein距離的實(shí)現(xiàn),建議是自動(dòng)的。匹配最小距離2(忽略大小寫)的每個(gè)已注冊(cè)命令都將顯示為建議。

如果需要在命令中禁用建議或調(diào)整字符串距離,請(qǐng)使用:

or

您還可以使用SuggestFor屬性顯式設(shè)置將為其建議給定命令的名稱。這允許對(duì)在字符串距離方面不接近的字符串提供建議,但在您的一組命令中是有意義的,并且對(duì)于某些您不需要?jiǎng)e名的字符串。例子:

Cobra可以基于子命令、標(biāo)志等生成文檔。請(qǐng)?jiān)?docs generation文檔 中閱讀更多關(guān)于它的信息。

Cobra可以為以下shell生成shell完成文件:bash、zsh、fish、PowerShell。如果您在命令中添加更多信息,這些補(bǔ)全功能將非常強(qiáng)大和靈活。在 Shell Completions 中閱讀更多關(guān)于它的信息。

Cobra is released under the Apache 2.0 license. See LICENSE.txt

名稱欄目:go語言的命令行框架詳解 go語言orm框架
轉(zhuǎn)載注明:http://chinadenli.net/article38/dojgopp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)網(wǎng)站營(yíng)銷網(wǎng)站建設(shè)App設(shè)計(jì)電子商務(wù)營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)