Att förstå GOPATH
Introduktion
Denna artikel hjälper dig att förstå vad GOPATH
är, hur det fungerar och hur du ställer in det. Detta är ett viktigt steg för att sätta upp en Go-utvecklingsmiljö, samt för att förstå hur Go hittar, installerar och bygger källfiler. I den här artikeln kommer vi att använda GOPATH
när vi hänvisar till begreppet mappstruktur som vi kommer att diskutera. Vi kommer att använda $GOPATH
för att referera till den miljövariabel som Go använder för att hitta mappstrukturen.
En Go Workspace är hur Go hanterar våra källfiler, kompilerade binärer och cachade objekt som används för snabbare kompilering senare. Det är typiskt, och rekommenderas också, att bara ha ett Go Workspace, även om det är möjligt att ha flera utrymmen. GOPATH
fungerar som rotmapp för ett arbetsutrymme.
Inställning av miljövariabeln $GOPATH
Miljövariabeln $GOPATH
listar platser där Go ska leta efter Go Workspaces.
Som standard antar Go att vår GOPATH
-plats ligger på $HOME/go
, där $HOME
är rotkatalogen för vårt användarkonto på vår dator. Vi kan ändra detta genom att ställa in miljövariabeln $GOPATH
. För ytterligare studier, följ den här handledningen om att läsa och ställa in miljövariabler i Linux.
För mer information om hur du ställer in variabeln $GOPATH
, se Go-dokumentationen.
Den här serien går dessutom igenom att installera Go och ställa in en Go-utvecklingsmiljö.
$GOPATH är inte $GOROOT
Det är i $GOROOT
som Go:s kod, kompilator och verktyg bor – detta är inte vår källkod. $GOROOT
är vanligtvis något i stil med /usr/local/go
. Vår $GOPATH
är vanligtvis något i stil med $HOME/go
.
Vi behöver inte specifikt ställa in $GOROOT
-variabeln längre, men den refereras fortfarande i äldre material.
Nu ska vi diskutera strukturen i Go Workspace.
Anatomi av Go Workspace
Inuti en Go Workspace, eller GOPATH
, finns det tre kataloger: bin
, pkg
och src
. Var och en av dessa kataloger har en speciell betydelse för Go-verktygskedjan.
.├── bin├── pkg└── src └── github.com/foo/bar └── bar.go
Låt oss ta en titt på var och en av dessa kataloger.
Katalogen $GOPATH/bin
är den katalog där Go placerar binärfiler som go install
kompilerar. Vårt operativsystem använder miljövariabeln $PATH
för att hitta binära program som kan köras utan en fullständig sökväg. Det rekommenderas att lägga till den här katalogen till vår globala $PATH
-variabel.
Om vi till exempel inte lägger till $GOPATH/bin
till $PATH
för att exekvera ett program därifrån måste vi köra:
- $GOPATH/bin/myapp
När $GOPATH/bin
läggs till $PATH
kan vi göra samma anrop på följande sätt:
- myapp
Den $GOPATH/pkg
-katalogen är den plats där Go lagrar förkompilerade objektfiler för att påskynda senare kompilering av program. Typiskt sett kommer de flesta utvecklare inte att behöva komma åt den här katalogen. Om du får problem med kompileringen kan du säkert radera den här katalogen och Go kommer sedan att bygga upp den igen.
Den src
-katalogen är den katalog där alla våra .go
-filer, eller källkoden, måste finnas. Detta ska inte förväxlas med källkoden som Go-verktyget använder, som finns i $GOROOT
. När vi skriver Go-program, paket och bibliotek kommer vi att placera dessa filer under $GOPATH/src/path/to/code
.
Vad är paket?
Go-kod är organiserad i paket. Ett paket representerar alla filer i en enda katalog på disken. En katalog kan endast innehålla vissa filer från samma paket. Paket lagras, tillsammans med alla användarskrivna Go-källfiler, under katalogen $GOPATH/src
. Vi kan förstå paketupplösning genom att importera olika paket.
Om vår kod finns på $GOPATH/src/blue/red
bör dess paketnamn vara red
.
Importeringsangivelsen för red
-paketet skulle vara:
import "blue/red"
Paket som finns i källkodsförvaringsställen, som GitHub och BitBucket, har hela förvaringsställets fullständiga plats som en del av sin importväg.
Till exempel skulle vi importera källkoden på https://github.com/gobuffalo/buffalo med hjälp av följande importväg:
import "github.com/gobuffalo/buffalo"
Därmed skulle den här källkoden finnas på följande plats på disken:
$GOPATH/src/github.com/gobuffalo/buffalo
Slutsats
I den här artikeln diskuterade vi GOPATH
som en uppsättning mappar som Go förväntar sig att vår källkod ska finnas inom, samt vad dessa mappar är och vad de innehåller. Vi diskuterade hur man ändrar den platsen från standardvärdet $HOME/go
till användarens val genom att ställa in miljövariabeln $GOPATH
. Slutligen diskuterade vi hur Go söker efter paket inom denna mappstruktur.
Go Modules introducerades i Go 1.11 och syftar till att ersätta Go Workspaces och GOPATH
. Det rekommenderas att börja använda moduler, men vissa miljöer, t.ex. företagsmiljöer, är kanske inte redo att använda moduler.
Den GOPATH
är en av de knepigare aspekterna av att ställa in Go, men när den väl är inställd kan vi oftast glömma den.
Leave a Reply