一、 目錄結構
1)在gopath模式下
作為一個workspace,需要包含src、pkg、bin三個目錄
workspace(/root/code/go)
|-- src //源碼目錄(自己寫的工程,或是go get獲取的工程)
|-- 我的工程
|--vendor //可選,該工程依賴的三方包
|-- pkg //編譯生成的靜態包文件(一般為.a文件)
|-- bin //go可執行工具目錄(執行go install后會復制到此目錄下)
設置環境變量:
export GOPATH=/root/code/go
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
源碼:必須放在src目錄下
依賴包:放在src目錄下(一般通過go get獲取),或是放在”我的工程“目錄下自己新建的vendor目錄里。
2)在go mod模式下
源碼可以放在任意地方,go mod依賴包會先下載到pkg目錄,保存為cach文件再解壓,以包名+版本號進行版本區分,如grpc@v1.28.0
源碼:任意位置
依賴包:告別vendor目錄,通過go mod管理,會下載到pkg目錄下。
go mod常用命令
- go mod init # 初始化當前目錄為模塊根目錄,生成go.mod, go.sum文件
- go mod download # 下載依賴包
- go mod tidy #整理檢查依賴,如果缺失包會下載或者引用的不需要的包會刪除
- go mod vendor #復制依賴到vendor目錄下面
- go mod 可看完整所有的命令
- go mod graph 以文本模式打印模塊需求圖
- go mod verify 驗證依賴是否正確
- go mod edit 編輯go.mod文件
二、引用自定義包
引用自定義包實例:
這里go mod init mytest,故意將module名和目錄配置不一樣。
root# cat go.mod module mytest go 1.14
工程目錄結構如下:
例1:import "mytest/mdAbc"
mytest為go mod 的module名
./mdAbc目錄名和包同名
直接import "mytest/mdAbc"
例2:import "mytest/json_test/jsonmode"
mytest為go mod 的module名
./json_test包名和子目錄同名,都是jsonmode,因此直接import "mytest/json_test/jsonmode"
當然也可以取別名的方式:xx "mytest/json_test/jsonmode"
例3:import hi "mytest/mdHi"
目錄./mdHi和包(hi)不同名,只能以取別名的方式import
例4:import wo "mytest/mdWo"
目錄./mdWo和包(wo)不同名,只能以取別名的方式import
例5:import ha "mytest/mdWo/mdHa"
目錄./mdWo/mdHa和包(ha)不同名,只能以取別名的方式import