webentwicklung-frage-antwort-db.com.de

funktion "undefined" in einer anderen Datei deklariert?

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

85
Juan M

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).

110
JimB

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 patha_package und die Directory ist ~/go/src/a_package. Sie können den gewünschten Run kind auswählen.

32

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.

4
Paul Berg

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.

3
Puneet Tokhi

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.

0
msoliman

Sie können eine der folgenden Möglichkeiten ausprobieren.

Methode 01 : gehe davon aus, dass dein Projektname MyProject ist

  • gehen Sie zu Ihrem Pfad, geben Sie go build ein und drücken Sie die Eingabetaste.
  • es wird eine ausführbare Datei als Projektname erstellt ("MyProject").
  • geben Sie dann in Ihr Terminal ./MyProject ein und drücken Sie die Eingabetaste

sie 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.  

0
Anuradh S

Wenn Ihr Quellordner strukturiert ist/go/src/blog (vorausgesetzt, der Name Ihres Quellordners ist blog).

  1. cd/go/src/blog ... (CD in dem Ordner, in dem sich Ihr Paket befindet)
  2. installieren Sie
  3. 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".

0
Druhin Bala