所以我第一次開發一個go應用程序。我開始知道有兩個變量GOROOT和GOPATH用於維護軟件包。我到目前爲止所瞭解的是,GOROOT適用於二進制文件,而GOPATH主要用於存儲項目所需的庫和輔助程序包。如何導入項目特定的go軟件包,同時爲完全不同的項目通用的軟件包保留一個單獨的位置?
這裏是我當前的項目結構 - main.go
package main
import (
"fmt"
"helper"
)
func main(){
fmt.Println("Hello")
}
helper.go的內容
package helper
import (
"fmt"
)
func SayWorld(){
fmt.Println("World")
}
的
/Users/john/work/project-mars
/Users/john/work/project-mars/main.go
/Users/john/work/project-mars/helper
/Users/john/work/project-mars/helper/helper.go
內容和去變量 -
GOROOT = /Users/john/apps/go
GOPATH = /Users/john/apps/go-packages
問題: 現在,當我執行下面的命令,我得到這個錯誤 -
mac-machine:project-mars john$ go build main.go
main.go:5:5: cannot find package "helper" in any of:
/Users/john/apps/go/src/helper (from $GOROOT)
/Users/john/apps/go-packages/src/helper (from $GOPATH)
我明白,GOPATH應該是我的工作項目目錄。但我關心的是以模塊化方式保留我的項目和庫包,以便後來我有一個完全不同的項目(即項目 - 極光),它可能會使用相同的github幫助程序包,它們不會被下載兩次,項目管理者和項目極光。
在不同的項目中工作時,我該如何避免這種冗餘?
更新:這不是我無法編譯它們。我可以使用GOPATH作爲我的項目目錄,並使用src,pkg,bin項目佈局,並重新組織這些文件,最後得到編譯項目。 yeeeeppi。但我的問題是關於解決以單一GOPATH方式出現的通用包問題的冗餘問題。
順便說一下,GOPATH應該改爲GOPATH =/Users/john/work/ – Zee
從「helper-lib」將目錄重命名爲「helper」是有意義的。 但是將「helper」目錄移動到「project-mars」之上看起來不太可能,因爲這樣**助手**目錄將是** project-mars **和** project-aurora **的兄弟。其實我使用子目錄來打包我的代碼。例如,當我有更多的文件時,將它們放在項目基地目錄之外將會失去模塊性。 另外GOPATH被設置爲一個單獨的位置,根據我期望的重複使用跨項目的公共庫的需求。 – imranhasanhira
感謝Zee指出「helper-lib」的目錄名稱。我會在我的問題中更新它,以便將重點放在我想要解決的問題上。 – imranhasanhira