Próbuję napisać podstawowy program go, który wywołuje funkcję w innym pliku, ale stanowi część tego samego pakietu. Jednak zwraca:
undefined: NewEmployee
Oto kod źródłowy:
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
, również twój główny pakiet zazwyczaj zawiera tylko jeden plik, a następnie importuje inne potrzebne elementygo run
? (i patrz golang.org/doc/code.html )main.go
iemployee.go
? Ponieważ wszystkie pliki go powinny mieć instrukcję dotyczącą pakietu, a ja nie widzę żadnych w twoim. Zobacz: golang.org/doc/code.html#PackageNamesgo
narzędzia.Odpowiedzi:
Przeczytaj „Jak napisać kod Go” .
Nie używaj
/src
w swoimGOPATH
. Pakiety znajdują się w$GOPATH/src
.W przypadku
build
lubinstall
musisz mieć swoje pliki w katalogu pakietu.Ponieważ
go run
musisz podać wszystkie pliki jako argument:go run main.go employee.go
Ale prawie zawsze powinieneś używać
go install
lubgo build
(a najlepiej pierwszego, ponieważgo build
powoduje zamieszanie podczas pracy z pakietami innymi niż główne)źródło
$ go run *.go
byłoby skrótem zamiast uruchamiania wszystkich plikówWłaśnie miałem ten sam problem w GoLand (czyli Intellij IDEA for Go) i opracowałem rozwiązanie. Musisz zmienić
Run kind
zFile
naPackage
lubDirectory
. Możesz to wybrać z menu rozwijanego, jeśli przejdziesz doRun/Edit
Konfiguracji.Np .: w przypadku opakowania
~/go/src/a_package
użyj aPackage path
ofa_package
i aDirectory
of~/go/src/a_package
andRun kind
ofPackage
lubDirectory
.źródło
Jeśli używasz
go run
, zróbgo run *.go
. Automatycznie znajdzie wszystkie pliki go w bieżącym katalogu roboczym, skompiluje, a następnie uruchomi twoją główną funkcję.źródło
go run !(*_test).go
- Golang: uruchamiaj wszystkie pliki .go w bieżącym katalogu za pomocą wiersza poleceń (pakiet wielu plików)Możesz spróbować jednego z poniższych:
Metoda 1 :
MyProject
go build
./MyProject
Możesz wykonać oba kroki jednocześnie, wpisując
go build && ./MyProject
. Pliki Gopackage main
są kompilowane do pliku wykonywalnego.Metoda 2 :
go run *.go
. Nie utworzy żadnego pliku wykonywalnego, ale działa.źródło
Jeśli chcesz wywołać funkcję z innego pliku go i używasz Golanda, znajdź opcję „Edytuj konfigurację” z menu Uruchom i zmień rodzaj uruchomienia z Plik na Katalog. Czyści wszystkie błędy i umożliwia wywoływanie funkcji z innych plików go.
źródło
Napotkałem ten sam problem
Go11
, po prostu chciałem podzielić się, jak go rozwiązałem, pomagając innym na wypadek, gdyby napotkali ten sam problem.Miałem swój projekt Go na zewnątrz
$GOPATH
, więc musiałem włączyćGO111MODULE=on
bez włączonej tej opcji, da ci ten problem; nawet jeśli spróbujesz zbudować lub przetestować całość,package
inaczejdirectory
nie zostanie to rozwiązane bezGO111MODULE=on
źródło
go run .
uruchomi wszystkie twoje pliki. Punkt wejścia to funkcja,main()
która musi być unikalna dlamain
pakietu.Inną opcją jest zbudowanie pliku binarnego za pomocą
go build
i uruchomienie go.źródło
powinieneś użyć modułów go teraz, jeśli nie śledzisz Jak napisać kod go
Z modułem go nie musisz umieszczać kodu w $ GOPATH / src. może również mieszkać w dowolnym innym miejscu.
Możesz przenieść kod do innego katalogu, np. / Worker. Aby to działało. Po prostu pod katalogiem pracowników uruchom moduł go
go mod init example.com/employee
źródło
Po prostu użyj polecenia,
go run *.go
aby wykonać wszystkie pliki go w pakiecie!źródło
Jeśli twój folder źródłowy ma strukturę / go / src / blog (zakładając, że nazwa twojego folderu źródłowego to blog).
Powinno to uruchamiać wszystkie pliki w tym samym czasie, zamiast konieczności ręcznego wyświetlania listy plików lub „biczowania” metody w wierszu poleceń.
źródło