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?

Author: icza, 2015-06-03

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?

 61
Author: icza,
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:

go build: buduje pakiet następnie odrzuca Wyniki

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.

Co dokładnie tworzą komendy go build i go 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").

Właściwie... 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ą jest foo.

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ści myprog, jak również samej myprog, ale tylko myprog 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", instaluje myprog zbudowany bez optymalizacji kompilatora, ale nie instaluje już również ponownie pakietów myprog używanych z biblioteki standardowej bez kompilatora optymalizacje.

 7
Author: VonC,
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