Forståelse af GOPATH

Indledning

Denne artikel vil hjælpe dig med at forstå, hvad GOPATH er, hvordan det fungerer, og hvordan du konfigurerer det. Dette er et afgørende skridt for opsætningen af et Go-udviklingsmiljø, samt for at forstå, hvordan Go finder, installerer og opbygger kildekodefiler. I denne artikel vil vi bruge GOPATH, når vi henviser til konceptet for den mappestruktur, som vi vil diskutere. Vi vil bruge $GOPATH til at henvise til den miljøvariabel, som Go bruger til at finde mappestrukturen.

Et Go-arbejdsområde er den måde, hvorpå Go administrerer vores kildefiler, kompilerede binære filer og cachede objekter, der bruges til hurtigere kompilering senere. Det er typisk, og anbefales også, kun at have ét Go Workspace, selvom det er muligt at have flere rum. GOPATH fungerer som rodmappe for et arbejdsområde.

Indstilling af miljøvariablen $GOPATH

Miljøvariablen $GOPATH indeholder en liste over steder, hvor Go skal lede efter Go Workspaces.

Som standard antager Go, at vores GOPATH-placering er på $HOME/go, hvor $HOME er rodmappen for vores brugerkonto på vores computer. Vi kan ændre dette ved at indstille miljøvariablen $GOPATH. Du kan læse mere i denne vejledning om læsning og indstilling af miljøvariabler i Linux.

For yderligere oplysninger om indstilling af $GOPATH-variablen henvises til Go-dokumentationen.

Dertil kommer, at denne serie gennemgår installation af Go og opsætning af et Go-udviklingsmiljø.

$GOPATH er ikke $GOROOT

Den $GOROOT er der, hvor Go’s kode, compiler og værktøjer bor – det er ikke vores kildekode. $GOROOT er normalt noget i stil med /usr/local/go. Vores $GOPATH er normalt noget i stil med $HOME/go.

Selv om vi ikke behøver at opsætte $GOROOT-variablen specifikt længere, henvises der stadig til den i ældre materialer.

Nu skal vi diskutere strukturen af Go-arbejdsområdet.

Anatomi af Go-arbejdsområdet

Inden for et Go-arbejdsområde, eller GOPATH, er der tre kataloger: bin, pkg og src. Hver af disse mapper har en særlig betydning for Go-værktøjskæden.

.├── bin├── pkg└── src └── github.com/foo/bar └── bar.go

Lad os se på hver af disse mapper.

Mappen $GOPATH/bin er det sted, hvor Go placerer binære filer, som go install kompilerer. Vores styresystem bruger miljøvariablen $PATH til at finde binære programmer, der kan udføres uden en fuld sti. Det anbefales at tilføje denne mappe til vores globale $PATH-variabel.

For eksempel, hvis vi ikke tilføjer $GOPATH/bin til $PATH for at udføre et program derfra, skal vi køre:

  • $GOPATH/bin/myapp

Når $GOPATH/bin er tilføjet til $PATH, kan vi foretage det samme opkald som sådan:

  • myapp

Mappen $GOPATH/pkg er det sted, hvor Go gemmer forudkompilerede objektfiler for at fremskynde den efterfølgende kompilering af programmer. Typisk vil de fleste udviklere ikke have brug for at få adgang til denne mappe. Hvis du oplever problemer med kompilering, kan du roligt slette denne mappe, hvorefter Go genopbygger den igen.

Den srcmappe er den mappe, hvor alle vores .go-filer, eller kildekoden, skal være placeret. Dette skal ikke forveksles med den kildekode, som Go-værktøjet bruger, og som befinder sig i $GOROOT. Når vi skriver Go-programmer, pakker og biblioteker, placerer vi disse filer under $GOPATH/src/path/to/code.

Hvad er pakker?

Go-kode er organiseret i pakker. En pakke repræsenterer alle filerne i en enkelt mappe på disken. En mappe kan kun indeholde visse filer fra den samme pakke. Pakker gemmes, sammen med alle brugerskrevne Go-kildefiler, under mappen $GOPATH/src. Vi kan forstå pakkeopløsning ved at importere forskellige pakker.

Hvis vores kode findes på $GOPATH/src/blue/red, skal dens pakkenavn være red.

Import-angivelsen for red-pakken ville være:

import "blue/red"

Pakker, der findes i kildekodeoplag, som GitHub og BitBucket, har den fulde placering af oplageret som en del af deres importsti.

For eksempel ville vi importere kildekoden på https://github.com/gobuffalo/buffalo ved hjælp af følgende importsti:

import "github.com/gobuffalo/buffalo"

Derfor ville denne kildekode være på følgende placering på disken:

$GOPATH/src/github.com/gobuffalo/buffalo

Konklusion

I denne artikel diskuterede vi GOPATH som et sæt af mapper, som Go forventer, at vores kildekode bor i, samt hvad disse mapper er, og hvad de indeholder. Vi diskuterede, hvordan man ændrer denne placering fra standardværdien $HOME/go til brugerens valg ved at indstille miljøvariablen $GOPATH. Endelig diskuterede vi, hvordan Go søger efter pakker i denne mappestruktur.

Go Modules, der blev introduceret i Go 1.11, har til formål at erstatte Go Workspaces og GOPATH. Det anbefales at begynde at bruge moduler, men nogle miljøer, f.eks. virksomhedsmiljøer, er måske ikke klar til at bruge moduler.

Den GOPATH er et af de vanskeligere aspekter ved opsætning af Go, men når den først er opsat, kan vi normalt glemme den.

Leave a Reply