2013-01-19 46 views
5

我想在Go中做一個簡單的計算器。我正在設計它,以便我可以首先構建命令行界面,並在GUI界面中輕鬆交換。項目位置是$GOPATH/src/gocalc(以下所有路徑均與項目位置相關)。命令行界面邏輯存儲在文件gocalc.go中。計算器邏輯存儲在文件calcfns/calcfns.gooperations/operations.go中。所有的文件具有相同的到其的文件名(沒有擴展)包名以外的主程序,gocalc.go,這是在通過import "gocalc/operations"package main建築包裝結構與兒童/子包裝

calcfns.gooperations.go進口; gocalc.go進口calcfns.go通過import "gocalc/calcfns"

總結:

  • $GOPATH/src/gocalc/
    • gocalc.go
      • package main
      • import "gocalc/calcfns"
    • calcfns/
      • calcfns.go
        • package calcfns
        • import "gocalc/operations"
    • operations/
      • operations.go
        • package operations

當我嘗試go build operations(從項目目錄),我得到的迴應:can't load package: package operations: import "operations": cannot find package 當我嘗試go build gocalc/operations,我得到can't load package: package gocalc/operations: import "gocalc/operations": cannot find package 當我嘗試go build operations/operations.go ,它編寫得很好

當我試圖go build calcfnsgo build gocalc/calcfns,我得到can't load package...消息,類似於操作中的消息;然而,當我嘗試建立calcfns/calcfns.go它扼流圈import語句:import "gocalc/operations": cannot find package

最後,當我嘗試go build .從項目目錄,它悶死了類似於前一段:import "gocalc/calcfns": cannot find package

我應該如何架構我的孩子包裝和/或進口報表,go build不會失敗?

回答

6

很愚蠢的是,我忘了導出我的GOPATH變量,所以go env顯示爲""GOPATH。 (感謝jnml建議打印go env; +1)。

完成此操作後(並將主程序移動到自己的文件夾{project-dir}/gocalc/gocalc.go),我可以通過go install gocalc/gocalc來構建/安裝程序。

這個故事的寓意,確保設置你的$ GOPATH環境變量,當你鍵入export GOPATH=...,而不是僅僅GOPATH=...

1

請嘗試添加輸出$ go env以提供更多線索。否則,目錄結構和(顯示的)導入語句看起來都不錯。

但是這句話

當我嘗試去建立業務(從項目目錄),我得到的迴應:無法加載包:包操作:輸入「操作」:找不到包

聽起來很奇怪。它似乎建議你在'operations.go'中有

package operations 

import "operations" 

,那會是罪魁禍首呢......?

+0

沒有,'operations'並沒有試圖導入本身。 ;)但是你的''env'確實告訴我,我使用'GOPATH = $ HOME/Projects/Go'而不是'export GOPATH = $ HOME/Projects/Go',這是真正的罪魁禍首。有趣的是,'echo $ GOPATH'仍然產生了「[abs〜〜/ Projects/Go'的路徑];然而'go env'顯示'GOPATH =「」'或者其他的。感謝您的建議。 +1 – weberc2

-1

非常簡單:

可以說我有一個名爲項目/應用程序:golang-playground

  1. 把你的根目錄在GOPATH/src/下,在我的情況下是GOPATH=~/go/src(運行命令go env來得到你的GOPATH)。我的應用程序,以便完整路徑是~/go/src/golang-playground enter image description here

  2. 比方說,你想使用的功能Index()文件裏:從我的main.go文件(當然這是在根目錄)router.go。所以在main.go:

    import (
        ... 
        "golang-playground/router" 
    ) 
    
    func main() { 
        foo.Bar("/", router.Index) // Notice caps means its public outside of file 
    }