2012-05-31 4 views
43

私は同じパッケージ(main)に属している3つのファイルで構成される小さなプログラムを持っていますが、 "main.go build go"を実行するとビルドが成功しません。それが1つのファイル(main.go)だったときは、すべて正常に動作しました。コンパイルでmain.goから取り出したものを見つけられず、main.goと同じディレクトリにある他の2つのファイルに置くことができないように見えます。 。その結果、 "未定義の"型エラーが発生します。 複数のファイルからなるGoプログラムをコンパイルするには?

私はGOPATH変数を設定について何かを読んで、私は
set GOPATH=%cd% 
go build main.go 

を試してみましたが、それはあまりにも動作しませんでした。

何か助けていただければ幸いです。

答えて

50

あなたはMYPROGというプログラム書いていると仮定すると:

をこの

myproject/go/src/myprog/xxx.go 

のようにディレクトリ内のすべてのファイルを入れて次に

をGOPATHそして

go install myprog 
を実行するために myproject/goを追加

この方法で、他のパッケージを追加することができますsとmyproject/go/srcのプログラムを使用してください。

参考:http://golang.org/doc/code.html

(このdocは常に新規参入によって逃し、そして多くの場合、最初に病気に理解されることがIMO囲碁チームの最大の注意を受けるべきである。)

+0

確かに、私が見落とした非常に便利な章です。ありがとう! – Vitaly

+1

なぜ/ go /を取り除いてmyproject/srcをやってみませんか? –

+0

また、私は "go install myprog"と仮定してプロジェクトのソースを$ GOPATHの場所に何とか書き込んでいますか?そうですか?そうであれば、答えの一部としてその説明を持つことはいいかもしれません。 –

45

あなたはmain.goからコードを分離たとえばmore.goに入力する場合は、そのファイルをgo build/go run/go installに渡すだけです。だから、

あなたは以前に更なる情報としては

go build main.go 

あなた今単に

go build main.go more.go 

を実行した場合:

go build --help 

状態:

If the arguments are a list of .go files, build treats them as a list 
of source files specifying a single package. 

後者は行くファイルにを期待しながら、go buildgo installは、パッケージ名を引数としてを期待するのは最初の二つの状態という点でgo run異なることに注意してください。しかし、最初の2人はgo installと同様にgoファイルを受け入れます。

ビルドはパッケージ/ファイルbuildだけです。installはGOPATHにオブジェクトとバイナリファイルを生成し、runはプログラムをコンパイルして実行します。

+3

さらに多くのファイルを追加したくない場合は、正規表現を使用してください。 go。* .go – NateW

+0

okありがとうございます。Goは常に実行可能ファイルを1つだけ書き出しますか?実行可能ファイルは(Javaのように)分けられませんか? –

+1

ビルド* .go、それは動作しますか?私のためではなかった –

18

また、単に/ MYPROG

その後

あなたは自分のアプリケーションを実行するために

./myprog 

を入力することができ、プロジェクトのフォルダでmyproject /行く/ srcの中

go build 

を実行することができ

+2

出力は実行可能ファイルではなくgoオブジェクトです。 – user2284570

関連する問題