Mam mały program składający się z trzech plików, wszystkie należące do tego samego pakietu (głównego), ale kiedy robię „przejdź do budowania main.go”, kompilacja się nie powiedzie. Gdy był to tylko jeden plik (main.go), wszystko działało dobrze. Teraz, gdy podjąłem trochę wysiłku, aby oddzielić kod, wygląda na to, że kompilator nie jest w stanie znaleźć rzeczy, które zostały wyjęte z main.go i umieszczone w tych dwóch innych plikach (które znajdują się w tym samym katalogu co main.go) . Co powoduje błędy „niezdefiniowanego typu”.
Jak skompilować ten program, który składa się z wielu plików?
źródło
Na
main.go
przykładmore.go
, gdy oddzielasz kod z do , po prostu przekazujesz ten plik dogo build
/go run
/go install
.Więc jeśli wcześniej biegałeś
go build main.go
teraz po prostu
go build main.go more.go
Jako dalsze informacje:
go build --help
stwierdza:
Zauważ, że
go build
igo install
różnią się odgo run
tego, że pierwsze dwa stany oczekują nazw pakietów jako argumentów, podczas gdy drugi oczekuje plików go . Jednak pierwsze dwa będą również akceptować pliki go, tak jak robi to go install.Jeśli się zastanawiasz: build zrobi tylko
build
pakiety / pliki,install
utworzy obiekty i pliki binarne w twoim GOPATH, a takżerun
skompiluje i uruchomi twój program.źródło
Możesz też po prostu biec
go build
w folderze twojego projektu myproject / go / src / myprog
Następnie możesz po prostu wpisać
do uruchamiania aplikacji
źródło
chmod +x
uprawnienia do tego pliku, aby go uruchomićOd wersji 1.11+ GOPATH nie jest już zalecany, nowy sposób polega na wykorzystaniu modułów Go.
Powiedzmy, że piszesz program o nazwie
simple
:Utwórz katalog:
mkdir simple cd simple
Utwórz nowy moduł:
go mod init github.com/username/simple # Here, the module name is: github.com/username/simple. # You're free to choose any module name. # It doesn't matter as long as it's unique. # It's better to be a URL: so it can be go-gettable.
Umieść wszystkie swoje pliki w tym katalogu.
Na koniec uruchom:
Alternatywnie możesz utworzyć program wykonywalny, budując go:
go build . # then: ./simple # if you're on xnix # or, just: simple # if you're on Windows
Aby uzyskać więcej informacji, możesz przeczytać to .
źródło
Możesz użyć
go build *.go go run *.go
oba będą działać również możesz użyć
go build . go run .
źródło
To zależy od struktury Twojego projektu. Ale najprostsze jest:
go build ./... -o ./myproject
następnie biegnij
./myproject
.Załóżmy, że struktura projektu wygląda następująco
- hello |- main.go
następnie po prostu przejdź do katalogu projektu i uruchom
go build -o ./myproject
następnie uruchom
./myproject
na powłoce.lub
# most easiest; builds and run simultaneously go run main.go
załóżmy, że twój główny plik jest zagnieżdżony w podkatalogu, takim jak
cmd
- hello |- cmd |- main.go
wtedy będziesz biec
go run cmd/main.go
źródło
Tak! To bardzo proste i właśnie wtedy do gry wkracza strategia pakietu. istnieją trzy sposoby, aby poznać moją wiedzę. struktura folderów:
GOPATH / src / github.com/ abc / myproject / adapter / main.go pkg1 pkg2 ostrzeżenie: adapter może zawierać tylko katalog główny pakietu i katalog Sun
go build main.go
go build main.go
go build myproject/adapter
Plik exe zostanie utworzony w katalogu, w którym obecnie się znajdujesz.
źródło