erlebe ich ein Problem, wo go run main.go
die Fehler produziert:Warum findet der Befehl "go run" keine zweite Datei im Hauptpaket?
# command-line-arguments
./main.go:9: undefined: test
jedoch die Befehle go build && ./goruntest
Kompilierung und das Programm ganz gut laufen.
Die Ausgabe lautet:
Hi from test()
Hi from sameFileTest()
Hi from pkgtest.Test()
Hi from pkgtest.Test1()
ich das Verzeichnis haben wie so Aufstellmaße:
go/src/github.com/username/goruntest/
pkgtest/
pkgtest.go
pkgtest1.go
main.go
test2.go
Hier ist der Code.
main.go
package main
import (
"fmt"
"github.com/username/goruntest/pkgtest"
)
func main() {
fmt.Println(test()) // main.go:9
fmt.Println(sameFileTest())
fmt.Println(pkgtest.Test())
fmt.Println(pkgtest.Test1())
}
func sameFileTest() string {
return "Hi from sameFileTest()"
}
gotest1.go
package main
func test() string {
return "Hi from test()"
}
pkgtest/pkgtest.go
package pkgtest
func Test() string {
return "Hi from pkgtest.Test()"
}
pkgtest/pkgtest1.go
package pkgtest
func Test1() string {
return "Hi from pkgtest.Test1()"
}
Ich verstehe, dass das Problem die zweite Datei als Teil package main
ist und ich verstehe auch, dass es kein wirklicher Grund ist eine zweite Datei in main
zu haben.
Meine Frage ist: Warumgo run
nicht in der Lage ist, dieses Set-up, sondern Gebäude zu handhaben und laufen die ausführbaren funktioniert gut?
EDIT
enthalten eine zweite Datei in pkgtest
Ich verstehe auch, dass der Befehl go run main.go gotest1.go
funktioniert, aber warum muss ich gotest1.go
angeben?
Ich habe diese Details aus Gründen der Kürze ursprünglich weggelassen. Aber jetzt sehe ich, dass sie für die Frage wichtig sind.
Es dokumentiert kompilieren und ausführen „die genannten Quelldateien“ auf der Kommandozeile die Bereitstellung übergeben. Wenn ich mich erinnere, werden möglicherweise importierte Pakete, die Änderungen hatten, nicht neu erstellt. Du willst wirklich "Build Build" machen, außer du machst ein wirklich einfaches Testskript. – twotwotwo
@twotwotwo, stimme ich zu (+1), aber in diesem Fall hat die benannte Quelldatei eine Abhängigkeit, die 'go run' nicht in' package main' findet. Warum das? – robbmj
Ich denke, sie haben dieses Verhalten gewählt, weil es Ihnen eine Sammlung von scriptähnlichen .go-Dateien in einem Verzeichnis zur Verfügung stellt und sie ohne Beeinträchtigung durch andere laufen lässt. – twotwotwo