私はGoの初心者です。私はこの言語が非常に好きですが、プログラムのサイズが大きくなるため、ファイルの分割を開始する必要があることにすぐに気付きました。
go run main.go
(main.goが私のmain()関数を持つファイルであった場合)
うまくいかず、プログラムを機能させる方法がわからなかったため、しばらくの間障壁にぶつかりました。
いくつかのクイック検索は、私に答えを導きます
go run main.go other.go ..
ここで、私のpackage main
で構成され、プログラミングを実行できます。しかし、これは毎回やるのが非常に面倒でイライラします。
私のような他の人が再びこの障壁にぶつかることを防ぐために、私は次の自己回答の質問を書きます。
ネイトフィンチ 注:
Go runは、実際には非常に小さなプログラムでのみ使用されることを意図しており、通常は1つのファイルのみが必要です。
UNIXでも、go run *.go
はしばしば正しくありません。単体テストがあるプロジェクト(およびすべてのプロジェクトに単体テストが必要です)では、次のエラーが発生します。
go run: cannot run *_test.go files (something_test.go)
ビルド制限も無視するため、_windows.go
ファイルはUnixでコンパイルされます(またはコンパイルが試行されます)。
議論のビット がgo run
は、残りのgo
コマンドと同様に機能し、そのためのオープンCLがあります( 5164 )。現在、Go 1.4で検討中です。それまでの間、すべてのプラットフォームで推奨されるソリューションは次のとおりです。
go build && ./<executable>
nix関連システム
ほとんどの場合、go run *.go
で十分です。
これによりエラーが発生する場合は、以下の方法に進みます。
Windowsシステム(およびgo run *.go
が機能しないその他の場合)
トークンの展開はWindowsのコマンドラインでは機能しないため、上記は機能せず、エラーが表示されます。 go run *.go
は、現在のコンパイラの制限により、OSで動作しない場合もあります。
これらの場合、使用
go build && foo.exe
ここで、foo.exe
は、生成される.exeファイルの名前です。おそらく実行可能ファイルの名前がわからない場合は、まず
go build
および生成された.exeファイルの名前を確認します。その後、ファイル名を含むメソッドを使用します。
これら2つのメソッドは、現在のディレクトリ内のすべての.goファイルを最小限の手間で構築して実行します。
すべてを実行できます.go
ファイル、テストを除く、このbash構造を使用:
go run $(ls -1 *.go | grep -v _test.go)
これを行う最良の方法は、次のように実行することです。
go run !(*_test).go
エラーを回避するために必要なテストファイルをすべてスキップします。
他の提案:
go build && ./<executable>
少し迷惑です。 gitによってマークされないように、常に実行可能ファイルを削除する必要があります。もちろんgitignoreに入れることもできますが、私は怠け者であり、これは余分なステップです。
あなたの質問の権利を理解している場合、他のコードをライブラリとしてインポートする必要があります。
ちょっとした例
./ testing/main.go:
package main
import "fmt"
import L "testing/lib"
func main() {
fmt.Println("Hello from main()")
L.Somefunc()
}
./ testing/lib/somelib.go:
package lib
import "fmt"
func Somefunc() {
fmt.Println("Hello from Somefunc()")
return
}
打ち上げへ - go run main.go
これを使うだけ
go run *.go
テストファイルがないと仮定して動作します
私の解決策は次のとおりです。
go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)
コマンドラインアプリを簡単に実行できるようにエイリアスで使用します
alias gorun='go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)'
$ gorun param1 param2
Windowsでは、通常、すべてのプロジェクトディレクトリに少しtest.batを追加するだけです。
go build
.\{project_name}.exe
go clean
十分に機能します。もちろん、{project_name}を実行可能ファイルの名前に置き換えます。そして、実行可能ファイルが終了すると、バッチスクリプトはクリーンアップに進みます。
ウィンドウの場合、次のように機能します。cmdを開き、フォルダーが存在するパスに移動します。次に、次のコマンドを入力してEnterを押します。
go build
この後、1つの実行可能ファイルが作成されます。次に、コマンドプロンプトで実行可能ファイルを呼び出します。実行可能ファイル名がProject.exeの場合、次を入力してEnterキーを押します。
Project.exe
go run
と組み合わせ go generate
解決策は次のとおりです。
//go:generate sh -c "go run path/*.go"