Nowi programiści Go często nie wiedzą lub są zdezorientowani, co robi podstawowe polecenie go build.
Czego dokładnie go build
i go install
polecenia budować i gdzie włożyli wynik / wyjścia?
go
build
compilation
icza
źródło
źródło
Odpowiedzi:
To, co
go
robi polecenie, zależy od tego, czy uruchomimy je dla „normalnego” pakietu, czy dla"main"
pakietu specjalnego .Do paczek
go build
buduje twój pakiet, a następnie odrzuca wyniki .go install
builds, a następnie instaluje pakiet w twoim$GOPATH/pkg
katalogu.Polecenia (pakiet
main
)go build
buduje polecenie i pozostawia wynik w bieżącym katalogu roboczym .go install
buduje polecenie w katalogu tymczasowym, a następnie przenosi je do$GOPATH/bin
.Co przekazać
go build
?Możesz przekazywać pakiety do
go build
pakietów, które chcesz zbudować. Możesz także przekazać listę.go
plików z pojedynczego katalogu, która jest wtedy traktowana jako lista plików źródłowych określająca pojedynczy pakiet.Jeśli nie podano żadnych pakietów (ścieżek importu), kompilacja jest stosowana w bieżącym katalogu.
Ścieżka importu może zawierać jeden lub więcej
"..."
symboli wieloznacznych (w tym przypadku jest to wzorzec )....
może dopasować dowolny ciąg, np.net/...
pasuje donet
pakietu i pakietów znajdujących się w dowolnym z jego podfolderów. Komendaczęsto używany do budowania pakietu w bieżącym folderze i powtarzających się wszystkich pakietów. To polecenie wydane w katalogu głównym projektu tworzy kompletny projekt.
Aby uzyskać więcej informacji na temat określania pakietów, uruchom
go help packages
.Odnośnie modułów
Wstępna obsługa modułów Go została wprowadzona w Go 1.11, a moduły stały się domyślne począwszy od Go 1.13. Gdy
go
narzędzie jest uruchamiane z folderu zawierającegogo.mod
plik (lub jednego z elementów nadrzędnych bieżącego folderu),go
narzędzie działa w trybie uwzględniającym moduł (starszy tryb nazywa się trybem GOPATH ).Podczas budowania modułów to, co jest budowane, jest określane na liście kompilacji . Lista kompilacji początkowo zawiera tylko moduł główny (moduł zawierający katalog, w którym
go
polecenie jest uruchamiane), a zależności modułu głównego są dodawane do listy kompilacji rekurencyjnie (dodawane są również zależności zależności).Aby uzyskać więcej informacji, uruchom
go help modules
.Zasadniczo możesz użyć
go build
jako sprawdzenia, czy pakiety można zbudować (wraz z ich zależnościami), ago install
także (na stałe) zainstalować wyniki w odpowiednich folderach$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 pakietów nie można zbudować / skompilować.Za każdym razem, gdy
go
narzędzie instaluje pakiet lub plik binarny, instaluje również wszelkie posiadane zależności, więc uruchomieniego install
spowoduje również automatyczne zainstalowanie pakietów, od których zależy twój program (publicznie dostępne, pakiety „go gettable”).Na początek przeczytaj oficjalną stronę Jak napisać kod Go .
Więcej informacji o
go
narzędziu: Polecenie idźMożesz również uzyskać dodatkową pomoc, uruchamiając następujące polecenie:
Warto również zauważyć, że począwszy od Go 1.5
go install
usuwa się również pliki wykonywalne utworzone przezgo build
( źródło ):Aby uzupełnić listę,
go run
kompiluje aplikację do folderu tymczasowego i uruchamia ten wykonywalny plik binarny. Po zamknięciu aplikacji prawidłowo czyści pliki tymczasowe.Pytanie zainspirowane powieścią Dave'a Cheney'a What does go build build?
źródło
Na pakiet:
To nie będzie prawdą po Go 1.10 (Q1 2018), dzięki CL 68116 i CL 75473 . Zobacz ten wątek , do którego się tu odwołuję.
Właściwie ...
go install
zmieni się również z Go 1.10, oprócz nowej pamięci podręcznej:źródło
go build
takget
? Mam błąd kompilacjicannot find package "github.com/spf13/cobra" in any of:…
. Nie wiem, jak to powiedzieć, żeby to dostać. Czy muszę wyraźnie uzyskać?go.mod
plik?go version go1.11.4 linux/amd64
. Nie wiem o go.mod. Ponownie budujęhttps://github.com/cbroglie/mustache/blob/master/cmd/mustache/main.go
, to dziwne, ponieważ właśnie zbudowałem cały pakiet i używam tego przykładu jako podstawy, i stworzyłem bardziej podstawową wersję, która działała (ale nie korzystam z tej biblioteki). Nie widzę, dlaczego nie został zainstalowany z pakietem wąsów.