Ich versuche, ein einfaches go-Programm zu schreiben, das eine Funktion für eine andere Datei aufruft, aber Teil desselben Pakets ist. Es wird jedoch Folgendes zurückgegeben:
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!"
}
package x
, außerdem enthält Ihr Hauptpaket normalerweise nur eine einzige Datei und importiert dann die anderen benötigten Teilego run
? (und siehe golang.org/doc/code.html )main.go
undemployee.go
? Weil alle go-Dateien eine Paketanweisung haben sollen und ich keine in Ihrer sehe. Siehe: golang.org/doc/code.html#PackageNamesgo
Tool aufrufen .Antworten:
Bitte lesen Sie "Wie schreibe ich Go Code" .
Nicht
/src
in Ihrem verwendenGOPATH
. Pakete befinden sich in$GOPATH/src
.Für
build
oderinstall
Sie müssen Ihre Dateien in einem Paketverzeichnis haben.Für
go run
müssen Sie alle Dateien als Argument angeben:Sie sollten jedoch fast immer
go install
oder verwendengo build
(und vorzugsweise das erstere, da diesgo build
bei der Arbeit mit Nicht-Hauptpaketen zu Verwirrung führt).quelle
$ go run *.go
wäre eine Abkürzung, anstatt alle DateienIch hatte gerade das gleiche Problem in GoLand (Intellij IDEA for Go) und habe eine Lösung gefunden. Sie müssen das
Run kind
vonFile
nachPackage
oder ändernDirectory
. Sie können dies aus einer Dropdown-Liste auswählen, wenn Sie inRun/Edit
Konfigurationen gehen .Beispiel:
~/go/src/a_package
Verwenden Sie für die Verpackung einPackage path
vona_package
und einDirectory
von~/go/src/a_package
undRun kind
vonPackage
oderDirectory
.quelle
Wenn Sie verwenden
go run
, tun Siego run *.go
. Es findet automatisch alle go-Dateien im aktuellen Arbeitsverzeichnis, kompiliert und führt dann Ihre Hauptfunktion aus.quelle
go run !(*_test).go
- Golang: Führen Sie alle .go-Dateien im aktuellen Verzeichnis über die Befehlszeile (Multi-File-Paket) ausSie können eine der folgenden Möglichkeiten ausprobieren.
Methode 01 : Nehmen Sie an, dass Ihr Projektname lautet
MyProject
go build
und drücken Sie die Eingabetaste../MyProject
und drücken Sie die EingabetasteSie können beide Schritte gleichzeitig ausführen, indem Sie tippen
go build && ./MyProject
. Es wird Ihr Projekt mit allen ordnungsgemäß ausführengo
Dateien .Methode 02
Geben Sie einfach ein
go run *.go
und drücken Sie die Eingabetaste. Dies wird alle Ihre ausführengo files
.Hoffe das wird jemandem helfen.
quelle
Wenn Sie eine Funktion aus einer anderen go-Datei aufrufen möchten und Goland verwenden, suchen Sie im Menü Ausführen die Option 'Konfiguration bearbeiten' und ändern Sie die Ausführungsart von Datei in Verzeichnis. Es löscht alle Fehler und ermöglicht es Ihnen, Funktionen aus anderen go-Dateien aufzurufen.
quelle
Ich bin auf das gleiche Problem mit gestoßen
Go11
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 draußen
$GOPATH
, also musste ich es aktivieren,GO111MODULE=on
ohne dass diese Option aktiviert war. Es wird Ihnen dieses Problem geben. selbst wenn Sie versuchen, das Ganze zu bauen oder zu testen,package
oderdirectory
es wird nicht ohne gelöst werdenGO111MODULE=on
quelle
Sie sollten jetzt go-Module verwenden , wenn Sie nicht folgen wie Go-Code geschrieben wird
Mit dem go-Modul müssen Sie den Code nicht in $ GOPATH / src eingeben. es kann auch an jedem anderen Ort leben.
Sie können den Code in ein anderes Verzeichnis wie / employee verschieben. Damit er funktioniert, initialisieren Sie das go-Modul direkt unter dem Mitarbeiterverzeichnis
quelle
Wenn Ihr Quellordner strukturiert ist / go / src / blog (vorausgesetzt, der Name Ihres Quellordners ist blog).
Damit sollten alle Ihre Dateien gleichzeitig ausgeführt werden, anstatt dass Sie die Dateien manuell auflisten oder eine Methode in der Befehlszeile "verprügeln" müssen.
quelle
go run .
führt alle Ihre Dateien aus. Der Einstiegspunkt ist die Funktion,main()
die für dasmain
Paket eindeutig sein muss .Eine andere Möglichkeit besteht darin, die Binärdatei mit zu erstellen
go build
und auszuführen.quelle
Verwenden Sie einfach den Befehl
go run *.go
, um alle go-Dateien in Ihrem Paket auszuführen!quelle