メインパッケージに複数のファイルがあるプロジェクトを「実行」するにはどうすればよいですか?


150

現在、メインパッケージにというファイルが1つありますmain.gomain.goコードが再利用できないため、別のパッケージを作成せずにのコンテンツを複数のファイルに分割するにはどうすればよいですか。

次のようなディレクトリ構造が必要です。

$ ls foo

main.go
bar.go

bar.go

package main

import "fmt"

func Bar() {
    fmt.Println("Bar")
}

次に main.go

package main

func main() {
    Bar()
}

しかしgo run main.go、私に与えます:

# command-line-arguments
./main.go:4:2: undefined: Bar

回答:


204

2019年7月26日更新(for> = 1.11)

go run .

元の答え

上記のコードは実際に機能します。問題は実行する必要があった

go run *.go

の代わりに

go run main.go

6
あなたが*_test.goあなたのフォルダに持っていない限り。次に、(1)shopt -s ext globと(2)が必要ですgo run !(*_test).go
getWeberForStackExchange 2015

そして、appengineを使用しているものはどうですか?
goodies4uall 2015年

私が試したところgo run ./cmd/myCmd/...、うまくいきました。多分これは_test.goファイルがあるときの正しい方法ですか?
VinGarcia

go run ../your_folder作業フォルダ内から私のために働く
Andy

3
ただやるgo run .
BarthesSimpson

66

Go 1.11を含む 2018年8月の更新の「実行」セクションには、次のように記載されています。

このgo runコマンドでは、単一のインポートパス、ディレクトリ名、または単一のパッケージに一致するパターンが許可されます。
これにより、go run pkgまたはgo run dir、最も重要なgo run .


元の回答2015年1月

で述べたように、「どのように複数のファイルからなる囲碁プログラムをコンパイルするには?」、go runそれ以降のファイルのリスト、期待し「コンパイルはして走るmainという名前のGoソースファイルを備えたパッケージを」。
だからあなたは確かにあなたのmainパッケージをいくつかのファイルに分割することができますgo run

これは、go build/go install予想されるパッケージ名(ファイル名ではない)とは異なります。
シンプルなgo buildは、親フォルダーにちなんで名前が付けられた実行可能ファイルを生成します。

このスレッド示されているようにgo run *.goシェルはワイルドカード拡張を行わないため、Windows CMDセッションではa は機能しません


1
runWindowsコマンドプロンプトを使用して複数のgoファイルを実行するための回避策はありますか?
ルーク、

1
ありがとう!これは私にトンを助けました。同じパッケージなのでmain.goだけでコードを実行できないのはなぜかと考え続けましたが、なぜそれが許可されなかったのかについては、理にかなっています。
Chris

4

前述のように、go run *.goWindowsの場合はスクリプトファイルをリストするだけです(* .goは機能しないため)。go run main.go other.go third.go


3

私の意見では、この質問への最良の回答は、トップ回答へのコメントに隠されています。

これを実行するだけです:

go run .

これにより、メインパッケージのすべてのファイルが実行されますが、次のようなエラーメッセージは表示されません

go run: cannot run *_test.go files (main_test.go)

@BarthesSimpsonへの称賛


0

Windowsの場合、Cygwinをインストールして、コマンドプロンプトの代わりに使用します。「go run * .go」が機能します。


そのためにMinGWをお勧めしますが、私に尋ねればアプローチは正しいです。私は誰もが本当に感情的に愛着を持つことができるとは思いませんcmd.exe
アレクサンドル・クラベット

0

最新バージョン(1.11)に従って、goでgorilla muxを使用してlocalhostで複数のファイルを実行しようとしている場合。次の2つのコマンドのいずれかを使用してみてください。

  1. && FolderName -port 8081をインストールします。

  2. && ./FolderName -port 8081をビルドします。

ターミナルでコマンドを実行する前に、ソースフォルダー、つまりgo / src / FolderNameにいることを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.