Co to jest go build build?
Nowi Programiści go często nie wiedzą lub nie mylą się, co robi podstawowe polecenie go build.
Co dokładnie budują komendy go build
i go install
i gdzie umieszczają wynik / wynik?
2 answers
To, co robi go
zależy od tego, czy uruchomimy ją dla "normalnego" pakietu, czy dla specjalnego pakietu "main"
.
Dla opakowań
-
go build
buduje pakiet, a następnie odrzuca wyniki. -
go install
buduje następnie instaluje pakiet w katalogu$GOPATH/pkg
.
Dla poleceń (pakiet main
)
-
go build
buduje polecenie i pozostawia wynik w bieżącym działaniu katalog . -
go install
buduje polecenie w katalogu tymczasowym, a następnie przenosi je do$GOPATH/bin
.
Zasadniczo możesz użyć go build
jako sprawdzenia, czy pakiety mogą być budowane (wraz z ich zależnościami), podczas gdy go install
również (na stałe) instaluje wyniki w odpowiednich folderach twojego $GOPATH
.
go build
po cichu zakończy działanie, jeśli wszystko jest w porządku i wyświetli komunikaty o błędach, jeśli pakiety nie mogą zostać zbudowane/skompilowane.
Gdy narzędzie go
instaluje pakiet lub binarny, instaluje również wszelkie zależności, które posiada, więc uruchamiając go install
zainstaluje również pakiety, od których zależy twój program (publicznie dostępne, pakiety "go gettable"), automatycznie.
Na początek przeczytaj oficjalny Jak napisać Go Code strona.
Więcej informacji o narzędziu go
: polecenie go
Możesz również uzyskać więcej pomocy, uruchamiając następujące polecenie:
go help build
Warto też zauważając, że począwszy od Go 1.5 go install
usuwa również pliki wykonywalne utworzone przez go build
(źródło):
If 'go install' (bez argumentów, co oznacza bieżący katalog) jeśli się powiedzie, usuń plik wykonywalny napisany przez 'GO build', jeśli istnieje. Pozwala to uniknąć pozostawienia nieświeżego binarnego za sobą...
Aby uzupełnić listę, go run
kompiluje aplikację do folderu tymczasowego i uruchamia plik wykonywalny. Po wyjściu aplikacji prawidłowo czyści tymczasowy pliki.
pytanie zainspirowane przez Dave ' a Cheneya co robi go build build?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-07 10:49:56
Dla pakietu:
To nie będzie prawda po Go 1.10 (Q1 2018), dzięki CL 68116 i CL 75473. Zobacz ten wątek , do którego odwołuję się tutaj.
go build
: buduje pakiet następnie odrzuca Wyniki
Właściwie...Co dokładnie tworzą komendy
go build
igo install
Za każdym razem, gdy narzędzie go instaluje pakiet lub binarny, instaluje również zależności, które posiada, więc uruchomienie go install spowoduje również automatyczne zainstalowanie pakietów, od których zależy twój program (publicznie dostępne, pakiety "go gettable").
go install
zmieni się również z Go 1.10, dodatkowo nowej pamięci podręcznej:
Polecenie "
go install
" nie instaluje już zależności nazwanych pakietów (CL 75850 ).Jeśli uruchomisz "
go install foo
", jedyną zainstalowaną rzeczą jestfoo
.Wcześniej było inaczej. Jeśli zależności były nieaktualne, "
go install
" zainstalował również dowolne zależności.
Domyślna instalacja zależności podczas "go install
" spowodowała wiele zamieszania i bólów głowy dla użytkowników, ale wcześniej konieczne było włączenie kompilacji przyrostowych.
Już nie.
Uważamy, że nowa semantyka "install what I said
" będzie o wiele bardziej zrozumiała, zwłaszcza że z raportów o błędach wynika, że wielu użytkowników już ich oczekiwało.
aby wymusić instalację zależności podczas "go install
", Użyj nowego "go install -i
", przez analogię do "go build -i
" i "go test -i
".Fakt, że "
go install
" używane do instalacji jakichkolwiek przebudowanych zależności powodował zamieszanie najczęściej w połączeniu z-a
, co oznacza "force rebuild of all dependencies
".
Teraz "go install -a myprog
" wymusi całkowitą przebudowę wszystkich zależnościmyprog
, jak również samejmyprog
, ale tylkomyprog
zostanie zainstalowana. (Wszystkie przebudowane zależności nadal będą zapisane w pamięci podręcznej kompilacji, oczywiście.)
Sprawienie, by ta sprawa działała bardziej co zrozumiałe, jest szczególnie ważne w połączeniu z nową analizą staleness opartą na treści, ponieważ widzi dobre powody, aby odbudować zależności częściej niż wcześniej, co zwiększyłoby ilość zamieszania "Dlaczego moje zależności zostały zainstalowane".
Na przykład, jeśli uruchomisz "go install -gcflags=-N myprog
", instalujemyprog
zbudowany bez optymalizacji kompilatora, ale nie instaluje już również ponownie pakietówmyprog
używanych z biblioteki standardowej bez kompilatora optymalizacje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-04 10:57:29