A GOPATH megértése

Bevezetés

Ez a cikk végigvezet azon, hogy mi az a GOPATH, hogyan működik, és hogyan kell beállítani. Ez kulcsfontosságú lépés a Go fejlesztőkörnyezet beállításához, valamint annak megértéséhez, hogy a Go hogyan találja meg, telepíti és építi be a forrásfájlokat. Ebben a cikkben a GOPATH-t fogjuk használni, amikor az általunk tárgyalt mappastruktúra fogalmára utalunk. A $GOPATH-t fogjuk használni, ha arra a környezeti változóra utalunk, amelyet a Go a mappastruktúra megtalálásához használ.

A Go munkaterület az, ahogyan a Go kezeli a forrásfájljainkat, a lefordított binárisokat és a gyorsabb későbbi fordításhoz használt gyorsítótárazott objektumokat. Jellemző, és ajánlott is, hogy csak egy Go Workspace legyen, bár lehetséges, hogy több tér is legyen. A GOPATH a munkaterület gyökérmappájaként működik.

A $GOPATH környezeti változó beállítása

A $GOPATH környezeti változó felsorolja azokat a helyeket, ahol a Go a Go munkaterületeket keresi.

Alapértelmezés szerint a Go feltételezi, hogy a GOPATH helyünk a $HOME/go, ahol a $HOME a számítógépünkön lévő felhasználói fiókunk gyökérkönyvtárát jelenti. Ezt a $GOPATH környezeti változó beállításával tudjuk megváltoztatni. További tanulmányozáshoz kövesse ezt a bemutatót a környezeti változók olvasásáról és beállításáról Linuxban.

Az $GOPATH változó beállításáról további információkat a Go dokumentációban talál.

Ez a sorozat továbbá végigveszi a Go telepítését és a Go fejlesztőkörnyezet beállítását.

$GOPATH Is Not $GOROOT

A $GOROOTben a Go kódja, fordítója és eszközei laknak – ez nem a mi forráskódunk. A $GOROOT általában valami olyasmi, mint a /usr/local/go. A mi $GOPATH-ünk általában valami olyasmi, mint $HOME/go.

Noha a $GOROOT változót már nem kell külön beállítanunk, a régebbi anyagokban még mindig hivatkoznak rá.

Most beszéljük meg a Go munkaterület felépítését.

A Go munkaterület anatómiája

A Go munkaterületen belül, vagy GOPATH, három könyvtár van: bin, pkg és src. Mindegyik könyvtárnak különleges jelentősége van a Go eszközlánc számára.

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

Vessünk egy pillantást az egyes könyvtárakra.

A $GOPATH/bin könyvtárban helyezi el a Go a binárisokat, amelyeket go install fordít. Az operációs rendszerünk a $PATH környezeti változót használja a bináris alkalmazások keresésére, amelyek teljes elérési útvonal nélkül is futtathatók. Ajánlatos ezt a könyvtárat hozzáadni a globális $PATH változónkhoz.

Ha például nem adjuk hozzá a $GOPATH/bin könyvtárat a $PATH-hoz, hogy onnan futtassunk egy programot, akkor a következőt kellene futtatnunk:

  • $GOPATH/bin/myapp

Ha a $GOPATH/bin könyvtárat hozzáadjuk a $PATH-hoz, akkor ugyanezt a hívást így tudjuk végrehajtani:

  • myapp

A $GOPATH/pkg könyvtárban a Go előre lefordított objektumfájlokat tárol, hogy a programok későbbi fordítását meggyorsítsa. Általában a legtöbb fejlesztőnek nem lesz szüksége arra, hogy hozzáférjen ehhez a könyvtárhoz. Ha problémákat tapasztalunk a fordítással kapcsolatban, nyugodtan törölhetjük ezt a könyvtárat, és a Go ezt követően újraépíti.

A src könyvtárban kell elhelyezni az összes .go fájlunkat, vagyis a forráskódot. Ez nem tévesztendő össze a Go eszközrendszer által használt forráskóddal, ami a $GOROOT könyvtárban található. Ahogy Go alkalmazásokat, csomagokat és könyvtárakat írunk, ezeket a fájlokat a $GOPATH/src/path/to/code alatt fogjuk elhelyezni.

Mi a csomagok?

A Go kód csomagokba van szervezve. Egy csomag a lemezen lévő egyetlen könyvtárban lévő összes fájlt képviseli. Egy könyvtár csak bizonyos fájlokat tartalmazhat ugyanabból a csomagból. A csomagokat az összes felhasználó által írt Go forrásfájllal együtt a $GOPATH/src könyvtár alatt tároljuk. A csomagfelbontást a különböző csomagok importálásával érthetjük meg.

Ha a kódunk a $GOPATH/src/blue/red cím alatt található, akkor a csomag neve red kell legyen.

A red csomag import utasítása a következő lenne:

import "blue/red"

A forráskód-tárhelyeken, például a GitHubon és a BitBucketen található csomagok importálási útvonalának részeként szerepel a tár teljes helye.

Például a https://github.com/gobuffalo/buffalo forráskódot a következő importálási útvonallal importálnánk:

import "github.com/gobuffalo/buffalo"

Ezért ez a forráskód a következő helyen lenne a lemezen:

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

Következtetés

Ebben a cikkben a GOPATH mint a Go által elvárt, a forráskódunkat tartalmazó mappák halmazát tárgyaltuk, valamint azt, hogy mik ezek a mappák, és mit tartalmaznak. Megbeszéltük, hogyan változtathatjuk meg ezt a helyet az alapértelmezett $HOME/go helyett a felhasználó által választottra a $GOPATH környezeti változó beállításával. Végül megbeszéltük, hogyan keresi a Go a csomagokat ebben a mappastruktúrában.

A Go 1.11-ben bevezetett Go modulok célja a Go munkaterületek és a GOPATH felváltása. Bár ajánlott elkezdeni a modulok használatát, egyes környezetek, például a vállalati környezetek nem biztos, hogy készen állnak a modulok használatára.

A GOPATH a Go beállításának egyik trükkösebb aspektusa, de ha egyszer beállítjuk, általában elfelejthetjük.

Leave a Reply