前言
Go語言沒有實現像Python那樣實現靈活的導入本地包與模塊的機制,在使用Go開發時遇到了本地包的相互導入問題,這里寫一個demo總結一下。
在同一項目中的情況
項目的目錄結構如下:其中mypackage包中的go腳本分別是主項目需要導入的函數;主項目是根目錄下的那個main.go文件。

代碼如下:
pack1.go
package mypackage import ( "fmt" "time" ) // 記得函數名大寫 func Now2() { fmt.Println("in pack2 Now>>>",time.Now()) }
package main import ( "fmt" "moduleDemo/mypackage" // 導入同一項目下的mypackage包 ) func main() { mypackage.Now() mypackage.Now2() fmt.Println("main...") }
如果我們直接運行main.go中的代碼會上報下面這樣的錯誤:
![]()
我們需要使用go module做一下下面處理,在項目的根目錄執行:
go mod init moduleDemo
生成一個go.mod文件,里面的內容為:
module moduleDemo go 1.14
然后執行代碼即可出來想要的結果,整個過程如下:
在不同項目中的情況
項目如下:run1包中的main.go想要導入mypackage中的腳本的函數。

pack1.go與pack2.go與上面的代碼一樣,main.go的代碼如下:
package main import ( "fmt" "mypackage" ) func main() { mypackage.Now() mypackage.Now2() fmt.Println("run1...") }
首先我們需要在mypackage包的目錄下執行命令:
go mod init mypackage
接着進入run1目錄,執行module命令:
go mod init run1
生成的文件結構如下:

當然有這些還不夠,我們需要在run1目錄下的go.mod文件中完善成下面這樣:
module run1 go 1.14 require "mypackage" v0.0.0 replace "mypackage" => "../mypackage"
然后執行run1中的代碼即可:

參考博客
