Go的目錄結構以及如何引用自己寫的包


一、 目錄結構

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM