GOPATH ve GOROOT değerleri ne olmalı?


323

Doozer'ı şu şekilde yüklemeye çalışıyorum :

$ goinstall github.com/ha/doozer

Bu hataları alıyorum.

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally

3
@ Yukarıdaki bağlantı artık geçerli değil
Jorrit Reedijk

Dosya proje için kullanılmıyor. OSX ile ilgili bir sorun burada bulunabilir: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin

Not: varsayılan GOPATHolarak sizin için Go 1.8 (2017) 'de ayarlanır. Aşağıdaki cevabımı
VonC

Evet, bunları da kafa karıştırıcı buldum, tanrıların örgütlenme şekli. Bu yardımcı oldu: albertech.blogspot.com/2017/01/…
kavanoz

1
@BenyaminJafari çünkü goinstallgerçekten eski Go1 öncesi ve 2012'den beri var değil.
Dave C

Yanıtlar:


310

GOPATHtartışılmıştır içinde cmd/gobelgeler :

GOPATHOrtam değişkeni listeleri yerleri Git koduna bakmak için. Unix'te, değer iki nokta üst üste işaretiyle ayrılmış bir dizedir. Windows'ta, değer noktalı virgülle ayrılmış bir dizedir. Plan 9'da değer bir listedir.

GOPATH paketleri standart Go ağacının dışına almak, oluşturmak ve kurmak için ayarlanmalıdır.

GOROOTkurulum talimatlarında tartışılmıştır :

Go ikili dağıtımları, bunların /usr/local/go(veya c:\GoWindows altında) yükleneceğini varsayar , ancak Go araçlarını farklı bir konuma yüklemek mümkündür. Bu durumda, GOROOTortam değişkenini yüklendiği dizine işaret edecek şekilde ayarlamanız gerekir.

Örneğin, Git'i ana dizininize yüklediyseniz, aşağıdaki komutları eklemeniz gerekir $HOME/.profile:

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

Not: GOROOT yalnızca özel bir konuma kurulurken ayarlanmalıdır.

( Chris Bunch'ın cevabının güncellenmiş versiyonu .)


44
GOPATH hakkında çok daha kapsamlı bilgi Go Code Nasıl Yazılır . goGo ile çalışmak için gerekli olan komutu anlamak için oradaki bilgileri kavramak gerekir . Örneğin goinstallOP'de kullanımı şimdi olmalıdır go get.
Sonia

13
Ayrıca go'nun gerçek yükleme yolunu da not edin. Örneğin, varsayılan bir homebrew kurulumunda, homebrew go girecektir /usr/local/Cellar/go/. Bu durumda dışa aktarma yolu export GOROOT=/usr/local/Cellar/go/{version}ve ile ayarlanmalıdır export PATH=$PATH:$GOROOT/bin.
ekillaby

10
export GOROOT=/usr/local/Cellar/go/1.2/libexec/Demlemek için benimkini çalıştırmak zorunda kaldım .
Steven Soroka

Bu düzenlemeyi öneremem çünkü uygulama düzenlememin biçimlendirilmemiş kodu “içerdiğini” şikayet ediyor (ki öyle değil; çok teşekkürler) ama:
Wildcard

Go 1.10'dan başlayarak, GOROOT ayarlanmamışsa go aracı kendi konumuna göre bulmaya çalışır. Bağlantıyı yapıştıramıyorum çünkü yapıştır, Stack Exchange'in iOS uygulamasında çalışmıyor. Şu anda çok sinirliyim.
Joker

97

İşte benim basit kurulum:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

GOROOT, GOPATH, PATH aşağıdaki gibi ayarlanır:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Kısacası:

GOROOT, go kurulumundan gelen derleyici / araçlar içindir.
GOPATH kendi go projeleriniz / 3. taraf kütüphaneler içindir ("go get" ile indirilir).


Klasör yapısına karşı bir eşleme olduğu için bu cevabın anlaşılması daha kolay olduğunu düşünüyorum.
h-rai

GOPATH, proje olmayan ağaçlara (örn. Git) gitmeyen dosyalar (ör. Resimler, komut dosyaları, derleme dosyaları vb.) İçerir mi?
Serge Merzliakov

52

İlk çalıştırma go env.
Go'nun yüklü olmadığını görürseniz, homebrewpaket üzerinden veya / veya başka yollarla yükleyebilirsiniz .
Çıktı görüyorsanız, o zaman Goyüklüdür.
Ayarlanmış ve ayarlanmamış tüm kıskançları gösterir.

Şunun için boş görürseniz GOROOT:

  1. Run which go(benim bilgisayarda: /usr/local/go/bin/go)
  2. o zaman bu şekilde dışa aktar export GOROOT=/usr/local/go

Şunun için boş görürseniz GOPATH:

  1. Benim durumumda go projeleri için bilgisayarınızın herhangi bir yerinde herhangi bir dizin oluşturun: ~/GO_PROJECTS
  2. Sonra export GOPATH=~/GO_PROJECTS

2
which gobenim için yaptım. Chocolatey kullanarak önceki bir kurulumdan başka bir kurulum konumu kullanıyordu. Bu klasörü sildi ve PATH değişkeninden kaldırdı. Şimdi çalışıyor. Teşekkürler!
sgarg

which gokomutu Windows 7'de benim için çalışmadı. Bu komutu nerede çalıştırmalıyım
firstpostcommenter

İlgili windows komutu, where goyürütülen dosyanın yolunu gösterecektir
Falco

export GOPATH=~/GO_PROJECTSiş yaptı
Thamaraiselvam

39

GOPATHburada tartışılmıştır :

GOPATHÇevre Değişken

GOPATH içinde Go kodu, paket nesneleri ve yürütülebilir dosyaların bulunabileceği iki nokta üst üste işaretli bir yol listesine ayarlanabilir.

Bir ayarlama GOPATHsürüme goinstall kullanmak ve Git ağacının dışında kendi kod ve dış kütüphaneleri yüklemek (ve Makefiles yazılmasını önlemek için).

Ve buradaGOROOT tartışılmaktadır :

$GOROOTGenellikle Go ağacının kökü $HOME/go. Bu, varsayılan olarak all.bashçalıştırılan dizinin üst öğesini kullanır . Ayarlamamayı seçerseniz $GOROOT, geleneksel makefiles kullanarak Go programları geliştirirken make veya gmake yerine gomake çalıştırmalısınız.


Eğer ~ / projects / go'da kurulu olsaydım değişkenin değerleri os, fmt, vs'yi bulmak için ne olmalı?
jshen

2
Öyleyse gittiğinizde Go nereye kurulur sudo apt-get install golang?
weberc2

9
@ weberc2 Eğer çalıştırırsanız go envbu bilgileri görmelisiniz, benim için/usr/lib/go/
Andre

19

go help gopathDokümanları okudum ve hala inanılmaz derecede kafam karıştı, ancak bu küçük külçeyi başka bir go doc sayfasından buldum:

GOPATH ortam değişkeni, çalışma alanınızın konumunu belirtir. Büyük olasılıkla Go kodu geliştirirken ayarlamanız gereken tek ortam değişkeni olabilir.

http://golang.org/doc/code.html#GOPATH


10

GOPATH gerektiğini değil git yüklemesine işaret değil, çalışma alanınıza (bkz https://golang.org/doc/code.html#GOPATH ). Git veya git kurulumu ile bir paket yüklediğinizde, GOPATH'ın içine inecektir. Eğer kesinlikle emin, sizi uyarır nedeni budur değil internet resmi kurulum içerisine boşalmayı rastgele paketler istiyorum.


9

Go 1.8 (Q2 2017) ile başlayarak, GOPATH varsayılan olarak $ HOME / go olarak ayarlanacak

Bkz sorunu 17.262 ve Rob Pike yorumuna:

$HOME/goOlacak.
Tek bir en iyi cevap yoktur, ancak bu kısa ve tatlıdır ve bu adı seçmek $HOME/gozaten mevcutsa, sadece zaten yüklenmiş ve anlayacak uzmanlar için mutlu olacaktır GOPATH.


Bu kadar basit bir konu nasıl bu kadar karmaşık olabilir? Buradaki en iyi cevap için teşekkürler.
dodgy_coder

@dodgy_coder Aslında ... diğer cevabımın ilk iki satırına bakın: stackoverflow.com/a/37905102/6309 ;) Bu daha da basit olabilir: artık GOPATH! Daha fazla ayrıntı için stackoverflow.com/a/48914523/6309 .
VonC

evet katılıyorum, varsayılan ile giderseniz GOPATH gerçekten gerekli değildir, bu doğru mu? Google App Engine (Standartlara Git) geliştirme ortamı için gerekli olması nedeniyle yine de ayarlamam gerekiyordu. Aslında size GOPATH'ı ayarlamanızı söylerler, ancak bunu hangi değere ayarlayacağınızı söylemeyin ..!
dodgy_coder

@ dodgy_coder Evet, varsayılan olarak Go, PATH projesini önceden belirlenmiş sabit bir değerde arayacaktır.
VonC

6

Yukarıda belirtildiği gibi:

GOPATH ortam değişkeni, çalışma alanınızın konumunu belirtir.

Windows için , bu benim için çalıştı (Ms-dos penceresinde):

set GOPATH=D:\my_folder_for_go_code\

Bu, Ms-dos'nun aşağıdaki gibi kullanıldığında tanıdığı bir GOPATH değişkeni oluşturur:

cd %GOPATH%

3

İlgili GOROOTözellikle Git 1.9 onun yükleme yolunu otomatik olarak ayarlar.
Eğer olsa bile birden Git ayarlayacaktır 1.9.x birini çağırarak, yüklü GOROOTiçin /path/to/go/1.9(daha önce, set değilse, o gibi varsayılan bir yolu kabul /usr/local/goveya c:\Go).

Bkz. CL Go Review 53370 :

Artık go tool, Go yükleme ağacının kökünü bulmaya çalışmak için çağrıldığı yolu kullanacaktır .
Bu, tüm Go kurulumu yeni bir konuma taşınırsa, go toolnormal şekilde çalışmaya devam etmesi gerektiği anlamına gelir .

Bu, GOROOTyalnızca olağandışı durumlarda yapılması gereken ortamın ayarlanmasıyla geçersiz kılınabilir. Bunun, orijinal yükleme konumunu bildirmeye devam edecek
olan runtime.GOROOT()işlevin sonucunu etkilemediğini unutmayın ; bu sonraki sürümlerde düzeltilebilir.


0

2020 ve Go sürüm 1.13+ sürümünden itibaren, Windows'ta GOPATH'ı güncellemenin en iyi yolu komut isteminde yazmaktır:

setx GOPATH C:\mynewgopath

0

İşte bir çözüm (tek kullanıcı):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

godeğiştirirseniz şikayet .gopatheder .go.

Keşke rust/cargoadamların nasıl yaptıklarına gittiler ve her şeyi tek bir yere koydu.


-1

osx'ta demleme ile kurdum, işte benim için çalışan ayar

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"

-1

Eklemek zorunda kaldım

export GOROOT=/usr/local/Cellar/go/1.10.1/libexec

Benim için ~ / .bash_profile , Mac OS X üzerinde


-1

Go kullandığımızda tüm go dosyalarını derlediği bir durum da vardır.

Diyelim ki bir dosya main.go'yuz ve daha sonra mevcut dosyayı main_old.go olarak değiştirdik ve yeni main.go dosyamızı ekledik . Sonra bizim app oluşturmak zaman tüm go dosyaları derlenir. Bu nedenle, gerçekleşen hata diğer bazı go dosyalarındaki derleme hatası nedeniyle olabilir.


-1

Go dili kurulduktan sonra, GOROOT kurulumun kök dizinidir.

Windows C: \ dizininde Go Lang ikili dosyasını patlattığımda, GOROOT'um C: \ go olmalıdır. Windows yükleyici ile yüklüyse, 64 bit paketler için C: \ Program Files \ go (veya C: \ Program Files (x86) \ go olabilir)

 GOROOT = C:\go

GOPATH'ım Go lang kaynak kodunun veya çalışma alanının konumudur.

Go lang kaynak kodum C: \ Users \\ GO_Workspace konumundaysa, GOPATH ürününüz aşağıdaki gibi olacaktır:

 GOPATH = C:\Users\<xyz>\GO_Workspace

-1

Açıkça ayarlamanıza gerek yoktur GOROOT(Go'nun modern sürümleri, çalıştırdığınız go ikili dosyasının konumuna göre kendi başına çözebilir).

Ayrıca, ile çalışmaya çalışırken aşağıdaki hatayı aldım vgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

GOROOT kaldırıldığında, GOPATH'ımı güncelledim ve export GO111MODULE="on"sorunu çözdüm .

GOPATH buraya bakın

GOPATH, içinde Go kodu, paket nesneleri ve yürütülebilir dosyaların bulunabileceği iki nokta üst üste işaretli bir yol listesine ayarlanabilir.

Kendi kodunuzu ve harici kitaplıklarınızı Git ağacının dışında oluşturmak ve yüklemek (ve Makefiles yazmaktan kaçınmak) için goinstall komutunu kullanmak üzere bir GOPATH ayarlayın.


-2

değerler (MACOS) olmalıdır:

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)

-3

Distro go kullanıyorsanız, içerme dosyalarının nerede olduğunu belirtmelisiniz, örneğin:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(Bu Fedora 20 içindir)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.