Inzicht in het GOPATH
Inleiding
In dit artikel leert u wat het GOPATH
is, hoe het werkt en hoe u het kunt instellen. Dit is een cruciale stap voor het opzetten van een Go ontwikkelomgeving, en ook om te begrijpen hoe Go bronbestanden vindt, installeert en bouwt. In dit artikel zullen we GOPATH
gebruiken om te verwijzen naar het concept van de mappenstructuur die we zullen bespreken. We zullen $GOPATH
gebruiken om te verwijzen naar de omgevingsvariabele die Go gebruikt om de mappenstructuur te vinden.
Een Go Workspace is hoe Go onze bronbestanden, gecompileerde binaries, en cache-objecten gebruikt om later sneller te compileren, beheert. Het is gebruikelijk, en ook aangeraden, om slechts één Go Workspace te hebben, hoewel het mogelijk is om meerdere ruimtes te hebben. De GOPATH
fungeert als de hoofdmap van een workspace.
Instellen van de $GOPATH omgevingsvariabele
De $GOPATH
omgevingsvariabele geeft aan waar Go naar Go Workspaces moet zoeken.
Standaard neemt Go aan dat onze GOPATH
locatie zich op $HOME/go
bevindt, waarbij $HOME
de hoofdmap is van onze gebruikersaccount op onze computer. We kunnen dit veranderen door de $GOPATH
omgevingsvariabele in te stellen. Voor verdere studie, volg deze tutorial over het lezen en instellen van omgevingsvariabelen in Linux.
Voor meer informatie over het instellen van de $GOPATH
variabele, zie de Go documentatie.
Daarnaast, deze serie loopt door het installeren van Go en het opzetten van een Go ontwikkelomgeving.
$GOPATH Is Not $GOROOT
De $GOROOT
is waar Go’s code, compiler, en tooling woont – dit is niet onze broncode. De $GOROOT
is gewoonlijk iets als /usr/local/go
. Onze $GOPATH
is gewoonlijk iets als $HOME/go
.
Hoewel we de $GOROOT
variabele niet meer specifiek hoeven in te stellen, wordt er nog steeds naar verwezen in oudere materialen.
Nu, laten we de structuur van de Go Workspace bespreken.
Anatomie van de Go Workspace
Binnenin een Go Workspace, of GOPATH
, zijn er drie directories: bin
, pkg
, en src
. Elk van deze directories heeft een speciale betekenis voor de Go tool chain.
.├── bin├── pkg└── src └── github.com/foo/bar └── bar.go
Laten we eens kijken naar elk van deze directories.
De $GOPATH/bin
directory is waar Go de binaries plaatst die go install
compileert. Ons besturingssysteem gebruikt de $PATH
omgevingsvariabele om binaire applicaties te vinden die kunnen worden uitgevoerd zonder een volledig pad. Het wordt aanbevolen om deze directory toe te voegen aan onze globale $PATH
variabele.
Als we bijvoorbeeld $GOPATH/bin
niet toevoegen aan $PATH
om van daaruit een programma uit te voeren, zouden we moeten uitvoeren:
- $GOPATH/bin/myapp
Wanneer $GOPATH/bin
is toegevoegd aan $PATH
kunnen we dezelfde aanroep als deze doen:
- myapp
De $GOPATH/pkg
directory is waar Go voorgecompileerde object bestanden opslaat om het latere compileren van programma’s te versnellen. Normaal gesproken zullen de meeste ontwikkelaars deze directory niet nodig hebben. Als u problemen ondervindt met het compileren, kunt u deze directory veilig verwijderen en Go zal hem dan opnieuw opbouwen.
De src
directory is waar al onze .go
bestanden, of broncode, moeten staan. Dit moet niet verward worden met de broncode die de Go tooling gebruikt, die zich in de $GOROOT
bevindt. Als we Go applicaties, pakketten en bibliotheken schrijven, zullen we deze bestanden onder $GOPATH/src/path/to/code
plaatsen.
Wat zijn pakketten?
Go code is georganiseerd in pakketten. Een package vertegenwoordigt alle bestanden in een enkele directory op schijf. Een directory kan alleen bepaalde bestanden van hetzelfde package bevatten. Pakketten worden opgeslagen, met alle door de gebruiker geschreven Go bronbestanden, onder de $GOPATH/src
directory. We kunnen pakketresolutie begrijpen door verschillende pakketten te importeren.
Als onze code in $GOPATH/src/blue/red
staat, dan zou de pakketnaam red
moeten zijn.
Het import statement voor het red
pakket zou zijn:
import "blue/red"
Pakketten die in broncode repositories staan, zoals GitHub en BitBucket, hebben de volledige locatie van de repository als onderdeel van hun import pad.
Voorbeeld, we zouden de broncode op https://github.com/gobuffalo/buffalo importeren met het volgende import pad:
import "github.com/gobuffalo/buffalo"
Daarom zou deze broncode op de volgende locatie op schijf staan:
$GOPATH/src/github.com/gobuffalo/buffalo
Conclusie
In dit artikel bespraken we de GOPATH
als een set van mappen waar Go verwacht dat onze broncode in staat, en ook wat deze mappen zijn, en wat ze bevatten. We bespraken hoe we die locatie kunnen veranderen van de standaard $HOME/go
naar de keuze van de gebruiker door de $GOPATH
omgevingsvariabele in te stellen. Tenslotte hebben we besproken hoe Go zoekt naar pakketten binnen die mappenstructuur.
Ingevoerd in Go 1.11, Go Modules hebben als doel om Go Workspaces en de GOPATH
te vervangen. Hoewel het wordt aanbevolen om modules te gaan gebruiken, kunnen sommige omgevingen, zoals bedrijfsomgevingen, nog niet klaar zijn voor het gebruik van modules.
De GOPATH
is een van de lastigere aspecten van het opzetten van Go, maar als het eenmaal is opgezet, kunnen we het meestal vergeten.
Leave a Reply