2015-10-26 11 views
5

「内部」パッケージを使用してgoコードを整理する方法を理解してください。"internal"パッケージの使用方法は?

project/ 
    internal/ 
    foo/ 
     foo.go # package foo 
    bar/ 
     bar.go # package bar 
    main.go 

# here is the code from main.go 
package main 

import (
    "project/internal/foo" 
    "project/internal/bar" 
) 

project/ GOPATHツリーから外側にある:私は私が持っている構造がどのような見せしましょう。 main.goからインポートしようとするパスは何もなく、うまく動作する唯一のケースはimport "./internal/foo|bar"です。私は何かが間違っていると思うか、一般的に間違った "内部"パッケージのアイデアを得る。誰もが物事をより明確にすることができますか?

UPDATE

上記の例では、私が$GOPATH/srcproject/フォルダを配置することでした必要なものだけが正しいです。したがって、project/internal/foo|barのようなインポートパスは、外部からではなくproject/サブツリーからのみインポートすると実行可能です。

+5

を建設することを計画する場合は特に、よりスケーラブルです。 'project/baz'パッケージを作成しようとすると、それをインポートすることはできません。すべてのプロジェクトをGOPATHに入れる。 –

+0

GOPATHの下にすべてのプロジェクトを配置したくない場合はどうすればいいですか? –

+2

これはgoツールの仕組みです。パッケージを使用する場合は、GOPATHの下にある必要があります。 – JimB

答えて

6

インポートするには、パッケージを$GOPATHに配置する必要があります。 import "./internal/foo|bar"で指定した例は、ローカルインポートを行うため動作します。 internalは、internalディレクトリに共通のルートディレクトリを共有しないコードにすると、internalのパッケージをインポートできません。

あなたgopathでこのすべてを置く場合は、その後、import "../../project/internal/foo"は失敗するでしょうOuterFolderprojectproject2の両方が含まれていOuterFolder/project2/main.goなどの別の場所からインポートしようとしました。 import "foo"またはこの条件を満たさないために試した方法でも失敗します。

インポートコードが 「内部」ディレクトリの親をルートとするツリーの外にある場合

「内部」要素を含むパスの輸入が禁止されています。

あなたがパス$GOPATH/src/projectを持っていた場合さて、あなたは$GOPATH/src/project/main.go内からimport "foo"import "bar"を行うことができ、インポートは成功するでしょう。 projectの下に含まれていないものは、fooまたはbarをインポートできません。方法下記

0

あなたはあなたが `$のGOPATH/src`にないパッケージをインポートすることはできません複数のバイナリ

github.com/servi-io/api 
├── cmd/ 
│ ├── servi/ 
│ │ ├── cmdupdate/ 
│ │ ├── cmdquery/ 
│ │ └── main.go 
│ └── servid/ 
│  ├── routes/ 
│  │ └── handlers/ 
│  ├── tests/ 
│  └── main.go 
├── internal/ 
│ ├── attachments/ 
│ ├── locations/ 
│ ├── orders/ 
│ │ ├── customers/ 
│ │ ├── items/ 
│ │ ├── tags/ 
│ │ └── orders.go 
│ ├── registrations/ 
│ └── platform/ 
│  ├── crypto/ 
│  ├── mongo/ 
│  └── json/ 

for more

関連する問題