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