GOPATHin ymmärtäminen

Esittely

Tässä artikkelissa käydään läpi, mitä GOPATH on, miten se toimii ja miten se määritetään. Tämä on ratkaiseva vaihe Go-kehitysympäristön perustamisessa sekä sen ymmärtämisessä, miten Go löytää, asentaa ja rakentaa lähdetiedostoja. Tässä artikkelissa käytämme GOPATH, kun viittaamme käsittelemämme kansiorakenteen käsitteeseen. Käytämme $GOPATH viitatessamme ympäristömuuttujaan, jota Go käyttää kansiorakenteen etsimiseen.

Go-työtila on se, miten Go hallinnoi lähdetiedostojamme, käännettyjä binääritiedostoja ja välimuistissa olevia objekteja, joita käytetään nopeampaan kääntämiseen myöhemmin. On tyypillistä ja myös suositeltavaa, että Go Workspace -työtiloja on vain yksi, vaikka niitä voi olla useita. GOPATH toimii työtilan juurihakemistona.

Ympäristömuuttujan $GOPATH asettaminen

Ympäristömuuttuja $GOPATH luettelee Go:lle paikkoja, joista Go etsii Go-työtiloja.

Oletusarvoisesti Go olettaa, että GOPATH-sijaintimme on osoitteessa $HOME/go, jossa $HOME on tietokoneemme käyttäjätilin juurihakemisto. Voimme muuttaa tätä asettamalla ympäristömuuttujan $GOPATH. Tutustu tarkemmin tähän ohjeeseen ympäristömuuttujien lukemisesta ja asettamisesta Linuxissa.

Lisätietoa muuttujan $GOPATH asettamisesta saat Go:n dokumentaatiosta.

Tässä sarjassa käydään lisäksi läpi Go:n asentaminen ja Go:n kehitysympäristön asettaminen.

$GOPATH ei ole $GOROOT

Tässä $GOROOT asuu Go:n koodia, kääntäjä ja työkalut – tämä ei ole lähdekoodimme. $GOROOT on yleensä jotain tyyliin /usr/local/go. Meidän $GOPATH on yleensä jotain $HOME/go.

Vaikka meidän ei tarvitse enää erikseen määrittää $GOROOT-muuttujaa, siihen viitataan edelleen vanhemmissa materiaaleissa.

Keskustellaan nyt Go-työtilan rakenteesta.

Go-työtilan anatomia

Go-työtilan eli GOPATH:n sisäpuolella on kolme hakemistoa: bin, pkg ja src. Jokaisella näistä hakemistoista on erityinen merkitys Go-työkaluketjulle.

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

Katsotaanpa kutakin näistä hakemistoista.

Hakemistoon $GOPATH/bin Go sijoittaa binääritiedostot, jotka go install kääntää. Käyttöjärjestelmämme käyttää $PATH-ympäristömuuttujaa löytääkseen binäärisovelluksia, jotka voidaan suorittaa ilman täyttä polkua. On suositeltavaa lisätä tämä hakemisto globaaliin $PATH-muuttujaamme.

Jos emme esimerkiksi lisää $GOPATH/bin:aa $PATH:iin, jotta voisimme suorittaa ohjelman sieltä, meidän täytyisi suorittaa:

  • $GOPATH/bin/myapp

Kun $GOPATH/bin lisätään $PATH:iin, voimme tehdä saman kutsun näin:

  • myapp

Hakemisto $GOPATH/pkg on paikka, jonne Go varastoi valmiiksi käännetyt objektitiedostot, jotta myöhempi ohjelmien kääntäminen nopeutuisi. Tyypillisesti useimpien kehittäjien ei tarvitse käyttää tätä hakemistoa. Jos havaitset ongelmia kääntämisessä, voit turvallisesti poistaa tämän hakemiston, jolloin Go rakentaa sen uudelleen.

Hakemistossa src on oltava kaikki .go-tiedostot eli lähdekoodi. Tätä ei pidä sekoittaa Go-työkalujen käyttämään lähdekoodiin, joka sijaitsee $GOROOT-hakemistossa. Kun kirjoitamme Go-sovelluksia, paketteja ja kirjastoja, sijoitamme nämä tiedostot osoitteeseen $GOPATH/src/path/to/code.

Mitä ovat paketit?

Go-koodi on järjestetty paketteihin. Paketti edustaa kaikkia tiedostoja yhdessä hakemistossa levyllä. Yksi hakemisto voi sisältää vain tiettyjä tiedostoja samasta paketista. Paketit tallennetaan kaikkien käyttäjän kirjoittamien Go-lähdetiedostojen kanssa $GOPATH/src-hakemistoon. Voimme ymmärtää pakettien resoluutiota tuomalla erilaisia paketteja.

Jos koodimme sijaitsee osoitteessa $GOPATH/src/blue/red, sen paketin nimen pitäisi olla red.

Paketin red import-lauseke olisi:

import "blue/red"

Paketeissa, jotka sijaitsevat lähdekoodin arkistoissa, kuten GitHubissa ja BitBucketissa, on arkiston koko sijainti osana import-polkua.

Tuomme esimerkiksi lähdekoodin osoitteessa https://github.com/gobuffalo/buffalo käyttäen seuraavaa tuontipolkua:

import "github.com/gobuffalo/buffalo"

Siten tämä lähdekoodi olisi seuraavassa sijainnissa levyllä:

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

Loppupäätelmä

Tässä artikkelissa käsiteltiin GOPATH kansioiden joukkona, jonka sisällä Go odottaa lähdekoodimme sijaitsevan, sekä sitä, mitä nuo kansiot ovat ja mitä ne sisältävät. Keskustelimme siitä, miten tuo sijainti voidaan muuttaa oletusarvoisesta $HOME/go käyttäjän valittavaksi asettamalla ympäristömuuttuja $GOPATH. Lopuksi keskustelimme siitä, miten Go etsii paketteja tuosta kansiorakenteesta.

Go 1.11:ssä esiteltyjen Go-moduulien tarkoituksena on korvata Go Workspaces ja GOPATH. Vaikka moduulien käytön aloittaminen on suositeltavaa, jotkin ympäristöt, kuten yritysympäristöt, eivät välttämättä ole valmiita käyttämään moduuleja.

GOPATH on yksi hankalimmista Go:n käyttöönoton osa-alueista, mutta kun se on kerran perustettu, voimme yleensä unohtaa sen.

Leave a Reply