大家好树酪,我叫謝偉浅碾,是一名程序員。
我們已經(jīng)研究了:
Golang 環(huán)境的搭建续语、設(shè)置GOPATH垂谢、GOROOT 參數(shù),Govendor 包管理疮茄, Goland 集成開(kāi)發(fā)環(huán)境
Golang 語(yǔ)言學(xué)習(xí)專(zhuān)欄 -- 第一期Golang 的基礎(chǔ)知識(shí):變量聲明滥朱、基本數(shù)據(jù)類(lèi)型、基本數(shù)據(jù)結(jié)構(gòu)(map力试、數(shù)組徙邻、切片、結(jié)構(gòu)體)懂版、流程控制鹃栽、循環(huán)操作等
Golang 語(yǔ)言學(xué)習(xí)專(zhuān)欄 -- 第二期Golang 函數(shù):入?yún)Ⅴ锫省⒎祷刂登搿⒛涿瘮?shù)、函數(shù)作為參數(shù)薇芝、函數(shù)作為返回值
Golang 語(yǔ)言學(xué)習(xí)專(zhuān)欄 -- 第三期Golang 結(jié)構(gòu)體:聲明和定義蓬抄、組合、格式化顯示夯到、訪(fǎng)問(wèn)字段嚷缭、方法定義
Golang 語(yǔ)言學(xué)習(xí)專(zhuān)欄 -- 第四期Golang 錯(cuò)誤處理機(jī)制
Golang 語(yǔ)言學(xué)習(xí)專(zhuān)欄 -- 第五期
本節(jié)的主題是:項(xiàng)目組織、包導(dǎo)入耍贾、第三方庫(kù)下載 和 管理阅爽。
Golang 語(yǔ)言的庫(kù)區(qū)分內(nèi)置庫(kù)和第三方庫(kù)。內(nèi)置庫(kù)荐开,下載安裝Golang 既可以使用付翁,第三方庫(kù)的使用,我們需要獲取到本地晃听,再使用百侧。
包的導(dǎo)入和管理,講述的是在Golang 里如何進(jìn)行內(nèi)置庫(kù)的使用和第三方庫(kù)的導(dǎo)入使用能扒,管理則指的是在自己構(gòu)建的工程里如何管理第三方庫(kù)佣渴。
1. 工作空間
第一節(jié),我們已經(jīng)知道如何設(shè)置 GOPATH 初斑、GOROOT
- GOPATH 即是項(xiàng)目的工程的目錄
- GOROOT 即是go 源代碼的目錄
工作空間由:src辛润、bin、pkg 三個(gè)目錄組成见秤。通常會(huì)把空間的目錄設(shè)置為GOPATH砂竖。
大致的目錄結(jié)構(gòu)如下:
workspace
src
github.com
op
bin
pkg
我們一般關(guān)心的是 src 目錄下的文件灵迫,包括:第三方庫(kù)和自己創(chuàng)建的項(xiàng)目
我們需要?jiǎng)?chuàng)建目錄就在GOPATH/src 下創(chuàng)建文件夾。
2. 包導(dǎo)入
- 內(nèi)置包導(dǎo)入
- 第三方包的導(dǎo)入
原則就是:在src 下的文件的路徑
比如:導(dǎo)入內(nèi)置包 fmt
import fmt
func main(){
fmt.Println("hello world")
}
比如:導(dǎo)入第三方庫(kù) cli
import (
"os"
"github.com/urfave/cli"
)
func main() {
app := cli.NewApp()
app.Run(os.Args)
}
表示:cli 源代碼在:GOPATH/src/github.com/urfave/cli
路徑下
導(dǎo)入自己寫(xiě)的包:
import (
"jianshu-go"
)
func main() {
jianshu.NewSpecialSubject("")
}
表示:jianshu-go 在 GOPATH/src/jianshu-go
強(qiáng)調(diào)一點(diǎn):golang 中晦溪,使用到的包需要導(dǎo)入瀑粥,不使用的包導(dǎo)入,編譯過(guò)程會(huì)報(bào)錯(cuò)三圆。這一點(diǎn)和 python 很不一樣狞换。
好,上文已經(jīng)知道了包的導(dǎo)入:即以GOPATG/src 為基本路徑導(dǎo)入完整路徑即可舟肉。雖然 golang 也支持相對(duì)路徑導(dǎo)入修噪,但不建議。
上文是一種包的默認(rèn)導(dǎo)入方式路媚。還存在下面幾種:
- 別名
package main
import name "fmt"
func main() {
name.Println()
}
即:重新給包命別名黄琼,上文中 name 替換了默認(rèn)的 fmt 名稱(chēng)
- 省略包名
package main
import . "fmt"
func main() {
Println("hello world")
}
即:省略包名,用點(diǎn)號(hào)省略包名整慎。所以包內(nèi)的函數(shù)脏款、方法、結(jié)構(gòu)體和變量等的使用直接寫(xiě)函數(shù)裤园、方法撤师、結(jié)構(gòu)體、變量等的名稱(chēng)拧揽。
- 只導(dǎo)入不使用
package main
import _ "fmt"
func main() {
}
上文提到剃盾,golang 中導(dǎo)入的包需要使用。否則會(huì)報(bào)錯(cuò)淤袜。上文的例子痒谴,使用_
表示只導(dǎo)入,而不使用铡羡。通常用于只是執(zhí)行那個(gè)需要導(dǎo)入包的 init
函數(shù)积蔚。
梳理下:
import name "fmt" # name.Println 別名方式
import _ "fmt" # 只初始化目標(biāo)包
import . "fmt" # 省略包名
import "fmt" # fmt.Println 原始包名+方法(函數(shù))
雖然存在幾種方式。但是推薦使用默認(rèn)方式:即原始包全路徑的方式蓖墅。其他方式库倘,使用到的時(shí)候能更好的組織你的代碼,那就用论矾。否則不建議使用教翩。
3. 包下載
- 使用 go 自帶的 命令行工具
go get -u -v *****
go get 后面接的參數(shù)即是:github 或者其他托管網(wǎng)站的代碼路徑。
鑒于國(guó)內(nèi)訪(fǎng)問(wèn) github 或者其他網(wǎng)站存在網(wǎng)絡(luò)訪(fǎng)問(wèn)慢的情況贪壳。推薦下面的方式饱亿。
- gopm
當(dāng)然gopm 這個(gè)也屬于一個(gè) go 第三方庫(kù),也需要使用第一種方式下載下
go get -u github.com/gpmgo/gopm
然后下載完成之后,使用 gopm 下載第三方庫(kù)
gopm get ****
后面接項(xiàng)目路徑彪笼。用法和go get 幾乎一致钻注。
下載的第三方庫(kù)的默認(rèn)路徑是:GOPATH/src
路徑
4. 包管理
通過(guò)上文,我們已經(jīng)知道如何導(dǎo)入包配猫、導(dǎo)入包的幾種方式幅恋、第三方包的下載、下載包的存放路徑等泵肄。
那自己創(chuàng)建的項(xiàng)目中如何管理第三方包呢? 即:將用到的第三方包移至個(gè)人項(xiàng)目工程下捆交。
govendor 。
雖然存在多種包的管理方式腐巢。但我覺(jué)得現(xiàn)在的這種方式挺友好的品追。
- 下載
go get -u github.com/kardianos/govendor
- govendor init
這一步觸發(fā)的動(dòng)作是創(chuàng)建:vendor 目錄 和 vendor.json 文件
- govendor add +external
這一步觸發(fā)的動(dòng)作是:將自己項(xiàng)目中使用到的第三方庫(kù),復(fù)制到vendor 目錄下冯丙,并維護(hù)vendor.json文件
總結(jié):通過(guò)本節(jié)肉瓦,你會(huì)知道
- go 的工作空間的文件系統(tǒng)組成
- go 中包的導(dǎo)入方式
- go 中第三方包的管理
下節(jié)我們寫(xiě)代碼,看代碼胃惜,分析代碼泞莉。
希望對(duì)你有所啟發(fā)。
再會(huì)蛹疯。