2016-03-14 61 views
0

所以我第一次開發一個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方式出現的通用包問題的冗餘問題。

回答

-1

重命名幫手-LIB文件夾幫手

然後在此文件夾從項目的火星移動到上一級文件夾工作

這應該使你的

import "helper" 
在main.go工作中聲明

+0

順便說一下,GOPATH應該改爲GOPATH =/Users/john/work/ – Zee

+0

從「helper-lib」將目錄重命名爲「helper」是有意義的。 但是將「helper」目錄移動到「project-mars」之上看起來不太可能,因爲這樣**助手**目錄將是** project-mars **和** project-aurora **的兄弟。其實我使用子目錄來打包我的代碼。例如,當我有更多的文件時,將它們放在項目基地目錄之外將會失去模塊性。 另外GOPATH被設置爲一個單獨的位置,根據我期望的重複使用跨項目的公共庫的需求。 – imranhasanhira

+0

感謝Zee指出「helper-lib」的目錄名稱。我會在我的問題中更新它,以便將重點放在我想要解決的問題上。 – imranhasanhira

0

請仔細閱讀How to Write Go Code。它解釋了你需要知道的一切。

您不使用GOPATH作爲您的項目目錄。假設你想要使用標準的Go工具,你的軟件包源需要位於與其導入路徑相對應的目錄中,就像任何其他軟件包一樣。

您的項目應位於$GOPATH/src/project-mars,可通過go install project-mars構建。 helper包應位於$GOPATH/src/project-mars/helper,並通過"project-mars/helper"導入。

+0

謝謝JimB。我閱讀完整的文章。很好地說。我擔心的是,如果我的項目可以處於完全不同的位置而不考慮GOPATH,那麼如何處理呢?我假設go的目的是強制開發者將所有的代碼保存在'GOPATH/src'目錄中。它是否正確?如果這是正確的,那就意味着將項目目錄保存在不同的位置(例如'/ Users/john/hobist-projects/project-mars','/ Users/john/hobist-projects/project-samurai'和'/ Users/john/office-projects/projects-aurora')真的很糟糕。我很好奇將其標記爲糟糕設計的原因。 – imranhasanhira

+0

@imranhasanhira:Go工具按照慣例工作,而不是配置。有一種方法可以使事情變得更簡單,每個人都可以以同樣的方式進行協作。如果你想以不同的方式構建你的項目,你可以自由地做你想做的事情,但你應該知道這些工具是如何工作的,以及他們期望什麼。您也可以自由使用其他構建工具,例如[gb](https://getgb.io/),它允許「基於項目的工作流程」。 – JimB

相關問題