Ich versuche, ein grundlegendes Go-Programm zu schreiben, das eine Funktion für eine andere Datei aufruft, jedoch einen Teil desselben Pakets. Es gibt jedoch zurück:
undefined: NewEmployee
Hier ist der Quellcode:
main.go
:
package main
func main() {
emp := NewEmployee()
}
employee.go
:
package main
type Employee struct {
name string
age int
}
func NewEmployee() *Employee {
p := &Employee{}
return p
}
func PrintEmployee (p *Employee) {
return "Hello world!"
}
Danke im Voraus
Bitte lesen Sie "How to Write Go Code" .
Verwenden Sie nicht /src
in Ihrer GOPATH
. Pakete befinden sich in $GOPATH/src
.
Für build
oder install
müssen Sie Ihre Dateien in einem Paketverzeichnis haben.
Für go run
müssen Sie alle Dateien als Argument angeben:
go run main.go employee.go
Sie sollten jedoch fast immer go install
oder go build
verwenden (und vorzugsweise ersteres, da go build
bei der Arbeit mit Nicht-Main-Paketen Verwirrung stiftet).
Ich hatte gerade das gleiche Problem in GoLand und fand eine Lösung. Sie müssen den Run kind
von File
in Package
oder Directory
ändern. Sie können dies aus einer Dropdown-Liste auswählen, wenn Sie in Run/Edit
Konfigurationen gehen.
Für das Paket ~/go/src/a_package
ist der Package path
a_package
und die Directory
ist ~/go/src/a_package
. Sie können den gewünschten Run kind
auswählen.
Wenn Sie go run
verwenden, tun Sie go run *.go
. Es wird automatisch alle go-Dateien im aktuellen Arbeitsverzeichnis finden, kompilieren und dann Ihre Hauptfunktion ausführen.
Wenn Sie eine Funktion aus einer anderen go-Datei aufrufen möchten und Goland verwenden, finden Sie im Menü Ausführen die Option 'Konfiguration bearbeiten' und ändern Sie die Ausführungsart von Datei zu Verzeichnis. Es löscht alle Fehler und ermöglicht das Aufrufen von Funktionen aus anderen go-Dateien.
Ich bin mit Go11
auf dasselbe Problem gestoßen und wollte nur mitteilen, wie ich es gelöst habe, um anderen zu helfen, nur für den Fall, dass sie auf dasselbe Problem stoßen.
Ich hatte mein Go-Projekt outside $GOPATH
, also musste ich GO111MODULE=on
aktivieren, ohne dass diese Option aktiviert war. Selbst wenn Sie versuchen, die gesamte package
oder directory
zu erstellen oder zu testen, wird sie ohne GO111MODULE=on
nicht gelöst.
Sie können eine der folgenden Möglichkeiten ausprobieren.
Methode 01 : gehe davon aus, dass dein Projektname MyProject
ist
go build
ein und drücken Sie die Eingabetaste../MyProject
ein und drücken Sie die Eingabetastesie können beide Schritte gleichzeitig ausführen, indem Sie go build && ./MyProject
eingeben. Ihr Projekt wird ordnungsgemäß mit allen go
-Dateien ausgeführt.
Methode 02
geben Sie einfach go run *.go
ein und drücken Sie die Eingabetaste. dies wird ausführen Ihren gesamten go files
.
Ich hoffe, das hilft jemandem.
Wenn Ihr Quellordner strukturiert ist/go/src/blog (vorausgesetzt, der Name Ihres Quellordners ist blog).
Das sollte alle Ihre Dateien gleichzeitig ausführen, anstatt dass Sie die Dateien manuell auflisten müssen oder eine Methode auf der Befehlszeile "bashing".