回答:
main
パッケージに複数含めることはできません。
より一般的には、特定の名前の関数をパッケージ内に複数持つことはできません。
取り外しmain
中にtest2.go
、アプリケーションをコンパイルします。demo
関数から見えるようになりますtest1.go
。
main
test2.goで削除した後、ビルドして実行できますが、test1.goをgo run test1.go
まだ使用できません。どうして ?
go run test1.go test2.go
Go Langはデフォルトで、言及されたファイルのみをビルド/実行します。すべてのファイルをリンクするには、実行中にすべてのファイルの名前を指定する必要があります。
以下の2つのコマンドのいずれかを実行します。
$go run test1.go test2.go. //order of file doesn't matter
$go run *.go
それらを構築したい場合は、同様のことを行う必要があります。
同じものを探していました。「test1からtest2でデモを呼び出す方法は?」という質問に答えるために、私が行った方法は次のとおりです。このコードをgo run test1.go
コマンドで実行します。current_folderをtest1.goがあるフォルダーに変更します。
test1.go
package main
import (
L "./lib"
)
func main() {
L.Demo()
}
lib \ test2.go
test2.goファイルをサブフォルダーに配置します lib
package lib
import "fmt"
// This func must be Exported, Capitalized, and comment added.
func Demo() {
fmt.Println("HI")
}
package lib; expected main
実行go run test1.go
したばかりで、そのファイルに同じパッケージ内の別のファイルの関数への参照がある場合、パッケージ全体を実行するようにGoに指示せず、その1つのファイルのみを実行するように指示したため、エラーが発生します。
いくつかの方法でコンマで区切られた実行でファイルをパッケージとしてグループ化することにより、パッケージ全体として実行するように指示できます。以下にいくつかの例を示します(ターミナルがパッケージのディレクトリにある場合)。
go run ./
または
go run test1.go test2.go
または
go run *.go
buildコマンドを使用して同じ動作を期待できます。実行後、作成された実行可能ファイルはグループ化されたパッケージとして実行され、ファイルは他の関数などを認識します。例:
go build ./
または
go build test1.go test2.go
または
go build *.go
その後、コマンドラインから実行可能ファイルを呼び出すだけで、パッケージ全体としてすべてのファイルを実行したときにrunコマンドを使用した場合と同様の出力が得られます。例:
./test1
または、実行可能ファイル名が作成されたときに呼び出されます。
go fmt
ですか?端末のように何ですか?それは彼が何かを気にかけていることをどのように示していますか?