本篇文章給大家分享的是有關(guān)怎么在golang中使用 module導(dǎo)入本地包,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
golang可以做服務(wù)器端開發(fā),但golang很適合做日志處理、數(shù)據(jù)打包、虛擬機處理、數(shù)據(jù)庫代理等工作。在網(wǎng)絡(luò)編程方面,它還廣泛應(yīng)用于web應(yīng)用、API應(yīng)用等領(lǐng)域。
mypackage/mypackage.go 內(nèi)容如下:
package mypackage import "fmt" func New(){ fmt.Println("mypackage.New") }
我們現(xiàn)在分兩種情況討論:
在同一個項目下
注意:在一個項目(project)下我們是可以定義多個包(package)的。
目錄結(jié)構(gòu)
現(xiàn)在的情況是,我們在 moduledemo/main.go 中調(diào)用了 mypackage 這個包。
moduledemo ├── go.mod ├── main.go └── mypackage └── mypackage.go
導(dǎo)入包
這個時候,我們需要在 moduledemo/go.mod 中按如下定義:
module moduledemo
go 1.14
然后在 moduledemo/main.go 中按如下方式導(dǎo)入 mypackage
package main import ( "fmt" "moduledemo/mypackage" // 導(dǎo)入同一項目下的mypackage包 ) func main() { mypackage.New() fmt.Println("main") }
舉個例子
舉一反三,假設(shè)我們現(xiàn)在有文件目錄結(jié)構(gòu)如下:
└── bubble
├── dao
│ └── mysql.go
├── go.mod
└── main.go
其中 bubble/go.mod 內(nèi)容如下:
module github.com/q1mi/bubble go 1.14
bubble/dao/mysql.go 內(nèi)容如下:
package dao import "fmt" func New(){ fmt.Println("mypackage.New") }
bubble/main.go 內(nèi)容如下:
package main import ( "fmt" "github.com/q1mi/bubble/dao" ) func main() { dao.New() fmt.Println("main") }
不在同一個項目下
目錄結(jié)構(gòu)
├── moduledemo
│ ├── go.mod
│ └── main.go
└── mypackage
├── go.mod
└── mypackage.go
導(dǎo)入包
這個時候, mypackage 也需要進行module初始化,即擁有一個屬于自己的 go.mod 文件,內(nèi)容如下:
module mypackage
go 1.14
然后我們在 moduledemo/main.go 中按如下方式導(dǎo)入:
import ( "fmt" "mypackage" ) func main() { mypackage.New() fmt.Println("main") }
因為這兩個包不在同一個項目路徑下,你想要導(dǎo)入本地包,并且這些包也沒有發(fā)布到遠程的github或其他代碼倉庫地址。這個時候我們就需要在 go.mod 文件中使用 replace 指令。
在調(diào)用方也就是 packagedemo/go.mod 中按如下方式指定使用相對路徑來尋找 mypackage 這個包。
module moduledemo go 1.14 require "mypackage" v0.0.0 replace "mypackage" => "../mypackage"
舉個例子
最后我們再舉個例子鞏固下上面的內(nèi)容。
我們現(xiàn)在有文件目錄結(jié)構(gòu)如下:
├── p1
│ ├── go.mod
│ └── main.go
└── p2
├── go.mod
└── p2.go
p1/main.go 中想要導(dǎo)入 p2.go 中定義的函數(shù)。
p2/go.mod 內(nèi)容如下:
module liwenzhou.com/q1mi/p2
go 1.14
p1/main.go 中按如下方式導(dǎo)入
import ( "fmt" "liwenzhou.com/q1mi/p2" ) func main() { p2.New() fmt.Println("main") }
因為我并沒有把 liwenzhou.com/q1mi/p2 這個包上傳到 liwenzhou.com 這個網(wǎng)站,我們只是想導(dǎo)入本地的包,這個時候就需要用到 replace 這個指令了。
p1/go.mod 內(nèi)容如下:
module github.com/q1mi/p1
go 1.14
require "liwenzhou.com/q1mi/p2" v0.0.0
replace "liwenzhou.com/q1mi/p2" => "../p2"
以上就是怎么在golang中使用 module導(dǎo)入本地包,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。