6

Goで簡単な電卓を作ろうとしています。最初にコマンドラインインターフェイスを構築し、GUIインターフェイスで簡単に交換できるように設計しています。プロジェクトの場所は次の$GOPATH/src/gocalcとおりです(以降のすべてのパスはプロジェクトの場所を基準にしています)。コマンドラインインターフェイスロジックはファイルに保存されますgocalc.go。電卓ロジックはファイルcalcfns/calcfns.goとに保存されますoperations/operations.go。メインプログラムを除いて、すべてのファイルのパッケージ名はファイル名(拡張子なし)と同じですgocalc.gopackage main

calcfns.gooperations.go経由でインポートimport "gocalc/operations"; 経由でgocalc.goインポートcalcfns.goimport "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 calcfnsまたはを実行しようとすると、操作の場合と同様のメッセージgo 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失敗しないように構成するにはどうすればよいですか?

4

3 に答える 3

7

愚かなことに、GOPATH変数をエクスポートするのを忘れたので、にgo env表示さ""GOPATHます。(印刷を提案してくれたjnmlに感謝しますgo env; +1)。

これを行った後(そしてメインプログラムを独自のフォルダに移動した後{project-dir}/gocalc/gocalc.go)、を介してプログラムをビルド/インストールできましたgo install gocalc/gocalc

話の教訓として、$ GOPATH環境変数を設定するときexport GOPATH=...だけでなく、必ず入力してくださいGOPATH=...

于 2013-01-19T18:46:38.690 に答える
1

$ go envより多くの手がかりを提供するために、の出力も追加してみてください。それ以外の場合は、ディレクトリ構造と(示されている)インポートステートメントの両方に問題がないように見えます。

しかし、文

(プロジェクトディレクトリから)ビルド操作を実行しようとすると、次の応答が返されます:パッケージをロードできません:パッケージ操作:インポート "操作":パッケージが見つかりません

奇妙に聞こえます。それはあなたが持っていることを示唆しているようです

package operations

import "operations"

'operations.go'で、それが原因となるのは...?

于 2013-01-19T18:28:30.893 に答える
-1

非常に簡単:

次の名前のプロジェクト/アプリがあるとします。golang-playground

  1. GOPATH/src/私の場合、ルートディレクトリをの下に置きますGOPATH=~/go/src(コマンドgo envを実行して取得しますGOPATH)。私のアプリの完全なパスは~/go/src/golang-playground ここに画像の説明を入力してください

  2. Index()ファイル内で関数を使用したいとします:router.go私のmain.goファイルから(もちろんルートディレクトリにあります)。したがって、main.goで:

    import (
        ...
        "golang-playground/router"
    )
    
    func main() {
        foo.Bar("/", router.Index) // Notice caps means its public outside of file
    }
    
于 2017-10-21T17:06:30.520 に答える