tidak dapat mengunduh, $ GOPATH tidak disetel

150

Saya ingin menginstal json2csv menggunakan go get github.com/jehiah/json2csvtetapi saya menerima kesalahan ini:

package github.com/jehiah/json2csv: cannot download, $GOPATH not set. For more details see: go help go path

Adakah bantuan tentang cara memperbaikinya pada MacOS?

Mona Jalal
sumber
3
Saya mengalami masalah yang sama dengan paket (pup) yang berbeda. Ayo pengelola, tolong buat pemasang (OS X) yang menyelesaikan pekerjaan! Penginstal OS X untuk Node adalah contoh yang bagus. Menggunakan Node tidak memerlukan langkah-langkah instalasi manual tambahan. Itu hanya bekerja. Saya berharap versi pemasang Go yang akan datang akan lebih baik.
jwfearn

Jawaban:

140

[Perbarui: mulai Go 1.8, GOPATHdefault untuk $HOME/go, tetapi Anda mungkin masih menemukan ini berguna jika Anda ingin memahami GOPATHtata letak, menyesuaikannya, dll.]

Situs resmi Go membahas GOPATH dan cara membuat direktori ruang kerja .

export GOPATH="$HOME/your-workspace-dir/"- jalankan di shell Anda, lalu tambahkan ~/.bashrcatau sederajat sehingga akan ditetapkan untuk Anda di masa mendatang. Go akan menginstal paket di bawah src/, bin/dan pkg/, subdirektori sana. Anda ingin meletakkan paket Anda sendiri di suatu tempat di bawah $GOPATH/src, seperti $GOPATH/src/github.com/myusername/jika Anda ingin menerbitkan ke GitHub. Anda mungkin juga ingin export PATH=$PATH:$GOPATH/bindi dalam Anda .bashrcsehingga Anda dapat menjalankan program yang dikompilasi di bawah$GOPATH .

Secara opsional, melalui Rob Pike , Anda juga dapat mengatur CDPATHsehingga lebih cepat cduntuk mengemas dirs dalam bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xartinya Anda bisa mengetik saja cd net/htmlalih-alihcd $GOPATH/src/golang.org/x/net/html .

Keith Rarick mencatat Anda dapat mengatur GOPATH=$HOMEuntuk meletakkan Go src/, pkg/dan bin/direktori tepat di bawah homedir Anda. Itu bisa menyenangkan (misalnya, Anda mungkin sudah ada $HOME/bindi jalur Anda) tetapi tentu saja beberapa orang menggunakan beberapa ruang kerja, dll.

twotwotwo
sumber
Terimakasih atas infonya. Apakah Anda perlu mengubah ruang kerja Anda untuk setiap proyek individu?
Doug Molineux
1
Secara umum, tidak, Anda bisa menggunakan satu ruang kerja yang src/berisi mis github.com/youruser/xdan github.com/youruser/y. Itu yang saya lakukan. Orang mungkin memiliki alasan untuk melakukan sebaliknya (kebijakan perusahaan untuk memisahkan proyek?), Tetapi saya tidak dapat berbicara tentang itu.
twotwotwo
3
$ GOPATH disetel, tetapi "tidak dapat mengunduh, $ GOPATH tidak disetel. Untuk lebih jelasnya lihat: go help gopath" tetap muncul.
Tyguy7
Platform apa (Windows atau Linux / OS X / Unix lainnya)? Jika bukan Windows, apa echo $GOPATHisinya? Mungkin layak dikirim sebagai pertanyaan terpisah; sepertinya Anda berada dalam situasi yang tidak biasa, dan men-debug itu dalam komentar bisa rumit.
twotwotwo
2
@ Tyguy7 kemungkinan Anda tidak melakukannya export; jalankan /bin/bash -c "echo \$GOPATH"untuk memverifikasi bahwa sub-proses dapat melihat $GOPATH; jika gema kosong, jalankan export GOPATHdan kemudiango get ...
sanmai
33

Menggunakan minuman

Saya menginstalnya menggunakan brew.

$ brew install go

Ketika itu selesai jika Anda menjalankan perintah minuman ini akan menampilkan info berikut:

$ brew info go
go: stable 1.4.2 (bottled), HEAD
Go programming environment
https://golang.org
/usr/local/Cellar/go/1.4.2 (4676 files, 158M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/go.rb
==> Options
--with-cc-all
    Build with cross-compilers and runtime support for all supported platforms
--with-cc-common
    Build with cross-compilers and runtime support for darwin, linux and windows
--without-cgo
    Build without cgo
--without-godoc
    godoc will not be installed for you
--without-vet
    vet will not be installed for you
--HEAD
    Install HEAD version
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin

Potongan-potongan penting ada garis-garis ini:

/usr/local/Cellar/go/1.4.2 (4676 file, 158M) *

export PATH = $ PATH: / usr / local / opt / go / libexec / bin

Menyiapkan lingkungan GO

Itu menunjukkan di mana GO diinstal. Kita perlu melakukan hal berikut untuk menyiapkan lingkungan GO:

$ export PATH=$PATH:/usr/local/opt/go/libexec/bin
$ export GOPATH=/usr/local/opt/go/bin

Anda kemudian dapat memeriksa menggunakan GO untuk melihat apakah itu dikonfigurasi dengan benar:

$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/usr/local/opt/go/bin"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.4.2/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

Menyiapkan json2csv

Terlihat bagus, jadi mari kita instal json2csv:

$ go get github.com/jehiah/json2csv
$

Apa yang baru saja terjadi? Itu menginstalnya. Anda dapat memeriksa seperti ini:

$ $ ls -l $GOPATH/bin
total 5248
-rwxr-xr-x  1 sammingolelli  staff  2686320 Jun  9 12:28 json2csv

OK, jadi mengapa saya tidak bisa mengetikkan json2csvshell saya? Itu karena /bindirektori di bawah $GOPATHtidak ada di Anda $PATH.

$ type -f json2csv
-bash: type: json2csv: not found

Jadi mari kita tambahkan sementara:

$ export PATH=$GOPATH/bin:$PATH

Dan periksa kembali:

$ type -f json2csv
json2csv is hashed (/usr/local/opt/go/bin/bin/json2csv)

Sekarang ada di sana:

$ json2csv --help
Usage of json2csv:
  -d=",": delimiter used for output values
  -i="": /path/to/input.json (optional; default is stdin)
  -k=[]: fields to output
  -o="": /path/to/output.json (optional; default is stdout)
  -p=false: prints header to output
  -v=false: verbose output (to stderr)
  -version=false: print version string

Tambahkan modifikasi yang telah kami buat $PATHdan buat $GOPATHAnda $HOME/.bash_profileuntuk membuatnya bertahan di antara reboot.

slm
sumber
18

Tonton Video

Secara umum, saya selalu merekomendasikan video resmi ini dari Go untuk mendapatkan gambaran umum singkat tentang masalah ini:

http://www.youtube.com/watch?v=XCsL89YtqCs

Lebih mudah ditampilkan daripada diberi tahu.

@jwfearn memparafrasekan bagian penting dari video:

export GOPATH="${HOME}/gocode"; export PATH="${PATH}:${GOPATH}/bin"; mkdir -p "${GOPATH}"

0x434D53
sumber
2
Video pengantar yang luar biasa - Saya selalu lebih mengerti ketika ditunjukkan kepada saya.
Joshua Pinter
3
Terima kasih @jwfearn - video untuk musik dan hiburan lainnya; tidak dapat menyalin & menempel dari mereka :-)
kguest
5

Saya merasa lebih mudah melakukannya seperti ini:

export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH
João Fernandes
sumber
3

Bagi MAC ini bekerja dengan baik untuk saya.

sudo nano /etc/bashrc

dan tambahkan di bawah ini di akhir file

export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=/usr/local/opt/go/bin

Ini harus memperbaiki masalah. Coba buka terminal baru dan echo $ GOPATH Anda akan melihat nilai yang benar.

Shasti
sumber
2

(untuk Mac)

Saya mencoba semua jawaban ini dan, untuk beberapa alasan yang masih belum diketahui, tidak ada yang berhasil.

Saya harus "memaksa memberi makan" GOPATH dengan mengatur variabel lingkungan per setiap perintah yang membutuhkannya. Sebagai contoh:

sudo env GOPATH=$HOME/goWorkDirectory go build ...

Bahkan glidememberi saya GOPATH not setkesalahan. Lagi-lagi diselesaikan dengan "pemaksaan makan": Saya mencoba semua jawaban ini dan, untuk beberapa alasan yang masih belum diketahui, tidak ada yang berhasil.

Saya harus "memaksa memberi makan" GOPATH dengan mengatur variabel lingkungan per setiap perintah yang membutuhkannya.

sudo env GOPATH=$HOME/goWorkDirectory glide install

Semoga ini bisa membantu seseorang.

zephel
sumber
2

Anda $GOROOTseharusnya tidak diatur. Anda $GOPATHharus diatur $HOME/godengan mengetikexport $GOPATH=$HOME/go

Silakan ketik export GOROOT=""untuk memperbaiki masalah Anda.

julien bouteloup
sumber
1

Lakukan saja export GOPATH="/whatever/you/like/your/GOPATH/to/be".

Volker
sumber
4
Jika saya seorang noob, saya belum tahu "di mana saya ingin GOPATH saya berada". IMHO itu hambatan yang tidak ada perilaku GOPATH default yang dapat ditimpa oleh variabel lingkungan.
jwfearn
0

Jika Anda mengalami masalah ini setelah $GOPATHmenyiapkan, itu mungkin karena Anda menjalankannya dengan shell yang tidak didukung. Saya menggunakan fishdan itu tidak berhasil, meluncurkannya dengan bashbekerja dengan baik.

Julien Fouilhé
sumber
0

Anda dapat menggunakan solusi "ekspor" seperti yang disarankan orang lain. Saya ingin memberi Anda solusi lain untuk kenyamanan permanen: Anda dapat menggunakan jalur apa pun sebagai GOPATH saat menjalankan perintah Go.

Pertama, Anda perlu mengunduh alat kecil bernama gost: https://github.com/byte16/gost/releases . Jika Anda menggunakan ubuntu, Anda dapat mengunduh versi linux ( https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz ).

Maka Anda perlu menjalankan perintah di bawah ini untuk membukanya:

$ cd /path/to/your/download/directory 
$ tar -xvf gost_linux_amd64.tar.gz

Anda akan mendapatkan executable gost. Anda dapat memindahkannya ke /usr/local/binuntuk penggunaan yang nyaman:

$ sudo mv gost /usr/local/bin

Jalankan perintah di bawah ini untuk menambahkan jalur yang ingin Anda gunakan sebagai GOPATH ke dalam pathspace yang gost dipertahankan. Diperlukan untuk memberi nama path yang akan Anda gunakan nanti.

$ gost add foo /home/foobar/bar     # 'foo' is the name and '/home/foobar/bar' is the path

Jalankan perintah Go yang Anda inginkan dalam format:

gost goCommand [-p {pathName}] -- [goFlags...] [goArgs...]

Misalnya, Anda ingin menjalankan go get github.com/go-sql-driver/mysqldengan /home/foobar/barsebagai GOPATH, lakukan saja seperti di bawah ini:

$ gost get -p foo -- github.com/go-sql-driver/mysql  # 'foo' is the name you give to the path above.

Ini akan membantu Anda untuk mengatur GOPATH dan menjalankan perintah. Tetapi ingat bahwa Anda telah menambahkan path ke gostdalam pathspace . Jika Anda berada di bawah level subdirektori apa pun /home/foobar/bar, Anda bahkan dapat menjalankan perintah di bawah ini yang akan melakukan hal yang sama:

$ gost get -- github.com/go-sql-driver/mysql

gostadalah Alat Go yang Sederhana yang dapat membantu Anda mengelola GOPATH dan menjalankan perintah Go. Untuk detail lebih lanjut tentang cara menggunakannya untuk menjalankan perintah Go lainnya, Anda bisa menjalankannya gost help goCmdName. Misalnya Anda ingin tahu lebih banyak tentang install, ketik saja kata-kata di bawah ini di:

$ gost help install

Anda juga dapat menemukan rincian lebih lanjut dalam README proyek: https://github.com/byte16/gost/blob/master/README.md

Franco
sumber
0

Jalankan 'go env' dan lihat ke mana tujuan GOPATH Anda saat ini. Jika Anda mengubah ke direktori itu, perintah 'go get..etc' Anda akan berfungsi.

Alexander Leon
sumber
0

Masalah ini terjadi pada saya di raspberry pi. Saya telah masuk melalui klien VNC. Masalahnya tetap ada meskipun mengatur dan mengekspor GOPATH. Lalu, jalankan perintah "pergi" tanpa sudo dan itu bekerja dengan sempurna.

mtamboli
sumber
-1

Saya harus menjalankan aplikasi sebagai root (untuk membuka server web pada port 80), ini menghasilkan kesalahan bagi saya, karena pengguna sudo memiliki lingkungan yang berbeda dari pengguna normal, maka GOPATH tidak disetel.

Jika orang lain mengalami masalah ini, tambahkan -Eke perintah, ini akan menjaga lingkungan pengguna.

sudo -E go run main.go

Untuk info lebih lanjut lihat diskusi di sini: Grup Google - Masalah GOPATH

Pwdr
sumber
Tidak yakin mengapa ini dibatalkan, tetapi diperbaiki untuk saya ...
Pwdr