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