創(chuàng)建日期: 2021年8月5日
環(huán)境參數(shù): go version:v1.16.7
參考鏈接:
Go 語(yǔ)言語(yǔ)法快速入門
Go 語(yǔ)言編碼規(guī)范
項(xiàng)目整體結(jié)構(gòu)介紹
準(zhǔn)備項(xiàng)目所需的 Go 類包
go mod使用
說(shuō)明:
在開始本章之前,先按照項(xiàng)目整體結(jié)構(gòu)介紹,新建出所需要文件夾和文件庆聘。
筆者是初學(xué)者燥透,僅供個(gè)人做個(gè)記錄栗弟。有搞錯(cuò)了的地方悍手,請(qǐng)大神指正??渴逻。
1. 依賴管理Go Modules
如果你的go的版本妙啃,是v1.11以上档泽,則無(wú)需安裝。
依賴管理工具的演變歷史揖赴,看這里馆匿。
之前,有文章推薦dep燥滑,也是包管理工具渐北,隨著golang自身的完善,現(xiàn)在主流是推薦使用golang官網(wǎng)推薦的Go Moudle铭拧。
1.1 操作
在你的項(xiàng)目文件夾下赃蛛,運(yùn)行下面命令恃锉,之后,會(huì)生成go.mod文件呕臂。
# awesomeProject 可以省略破托,也可以自定義。省略時(shí)歧蒋,默認(rèn)為文件夾名土砂,即項(xiàng)目名。
go mod init awesomeProject
運(yùn)行上面命令后谜洽,看到如下提示:
go: creating new go.mod: module awesomeProject
go: to add module requirements and sums:
go mod tidy
如果萝映,我們省略命令中的module名awesomeProject
部分,則不會(huì)出現(xiàn)上面的提示阐虚。關(guān)于go mod tidy
命令序臂,我們之后再說(shuō),這里先無(wú)視敌呈。
現(xiàn)在贸宏,可以看到文件夾下造寝,出現(xiàn)了自動(dòng)生成的go.mod文件磕洪,默認(rèn)內(nèi)容如下:
module awesomeProject
go 1.16
1.2 配置
查看配置:
# Terminal上執(zhí)行該命令,可以看到配置信息
go env
結(jié)果:
// 配置信息:
GO111MODULE=""
GOARCH="amd64"
// ...省略
(之前糾結(jié)的GOPATH也可以在配置中诫龙,看到路徑了析显。)
修改配置:
因?yàn)榫W(wǎng)絡(luò)環(huán)境不同,國(guó)內(nèi)貌似還需要配置代理签赃。(參考go mod使用)
# 例子:開啟Go Moudles模式的命令
go env -w GO111MODULE=on
修改后谷异,我們?cè)偻ㄟ^(guò)go env
命令查看當(dāng)前配置,如下:
GO111MODULE="on"
GOARCH="amd64"
// ...省略
在這篇文章中锦聊,對(duì)GO111MODULE
的設(shè)置歹嘹,有如下定義:
GO111MODULE | 意義 |
---|---|
on |
go命令行將不會(huì)支持module功能,尋找依賴包的方式將會(huì)沿用舊版本那種通過(guò)vendor目錄或者GOPATH模式來(lái)查找孔庭。 |
off |
go命令行會(huì)使用modules尺上,而一點(diǎn)也不會(huì)去GOPATH/src目錄下查找。 (pkg 包都存放在 $GOPATH/pkg 下) |
auto |
默認(rèn)值圆到,go命令行將會(huì)根據(jù)當(dāng)前目錄來(lái)決定是否啟用module功能怎抛。(pkg 包都存放在 $GOPATH/pkg 下) |
GO111MODULE="on"
,意味著,我們已經(jīng)開啟了Go Moudles模式芽淡,可以自動(dòng)下載安裝依賴了马绝。
??至此,包管理工具部分挣菲,告一段落富稻。下面掷邦,我們用Go Modules安裝所需要的庫(kù)。
2. 小試牛刀–––利用Go Moudles安裝庫(kù)
2.1 操作
一般安裝庫(kù)唉窃,都會(huì)有一個(gè)命令耙饰,通過(guò)命令安裝。資料中顯示纹份,Go Moudles更智能些苟跪,它會(huì)根據(jù)代碼里import的包名,自動(dòng)下載安裝蔓涧,我們來(lái)操作一下件已。
操作步驟:
- STEP1: 新建一個(gè)文件,命名為main.go
- STEP2: main.go的內(nèi)容如下:
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Hello())
}
- STEP3: 執(zhí)行命令
go run main.go
出現(xiàn)如下錯(cuò)誤:
main.go:5:1: no required module provides package rsc.io/quote; to add it:
go get rsc.io/quote
筆者按照提示元暴,運(yùn)行了go get rsc.io/quote
,成功安裝了這個(gè)庫(kù)篷扩。此時(shí),我們可以看懂打印臺(tái)上顯示茉盏,所下載安裝的庫(kù)的版本鉴未。并且,我們也可以在go.mod中鸠姨,看到所安裝庫(kù)的版本信息铜秆。
之后,再次執(zhí)行STEP3的命令讶迁,成功執(zhí)行连茧,看到Hello, world.
被打印出來(lái)。
(疑問(wèn):
為什么資料上說(shuō)巍糯,會(huì)自動(dòng)查找并下載安裝啸驯,我已經(jīng)設(shè)置了go modules打開,為什么并沒自動(dòng)下載安裝呢祟峦?
這里罚斗,是不是要每次新安裝庫(kù)的時(shí)候,都要執(zhí)行go get
命令呢宅楞?有待調(diào)查)
2.2 go mod使用
我么可以通過(guò)go help mod
命令针姿,查詢go mod的命令:
命令 | 意義 |
---|---|
download | download modules to local cache |
edit | edit go.mod from tools or scripts |
graph | print module requirement graph |
init | initialize new module in current directory |
tidy | add missing and remove unused modules |
vendor | make vendored copy of dependencies |
verify | verify dependencies have expected content |
why | explain why packages or modules are needed |
3. 常用的庫(kù)
這部分,會(huì)在之后的學(xué)習(xí)中咱筛,慢慢補(bǔ)充搓幌。
3.1 HTTP web framework Gin
https://golang.org/doc/tutorial/web-service-gin
Gin是一個(gè)框架,效率是HttoRoute的40倍迅箩,golang推薦使用的溉愁。
4. 補(bǔ)充知識(shí)–––GOROOT,GOOPATH
??GOROOT,GOOPATH概念拐揭〕敷。看了一些文章,有提到這兩組概念的堂污,雖然家肯,有的概念,貌似已經(jīng)被淘汰了盟猖,感興趣的可以稍微了解下讨衣。(參考)
GOROOT: GOROOT是Go的安裝目錄。Go安裝程序會(huì)自動(dòng)設(shè)置$GOROOT環(huán)境變量式镐,一般不需要手動(dòng)進(jìn)行設(shè)置反镇。
Linux下GOROOT的缺省目錄為 /usr/local/go/GOPATH:GOPATH目錄是Go的工作目錄,其中包含本地的項(xiàng)目文件娘汞,項(xiàng)目中引用的的第三方package歹茶,以及生成的二進(jìn)制文件。
Go語(yǔ)言工具要求GOPATH的目錄結(jié)構(gòu)包含bin,pkg,src三個(gè)子目錄你弦。
安裝依賴包時(shí)惊豺,多次提到過(guò)GOPATH。但是禽作,因?yàn)楦某蓈ender模式進(jìn)行包管理尸昧,現(xiàn)在已經(jīng)不需要把項(xiàng)目放到GOPATH下了。
上一篇:Go語(yǔ)言入門(一) 后臺(tái)開發(fā):我的第一個(gè)Go項(xiàng)目
下一篇: 待續(xù)领迈。彻磁。碍沐。