GOBIN tidak disetel: tidak dapat menjalankan go install

86

Saya mencoba menginstal paket kustom saya untuk file main.go saya. Namun, saat saya lari

go install custom.go

Saya mendapat kesalahan ini

go install: no install location for .go files listed on command line (GOBIN not set)

Bagaimana cara mengatur GOBIN?

pengguna3918985
sumber
16
BTW: Ini adalah cara yang sepenuhnya salah untuk menginstal paket. Ini tidak akan berhasil. go installmenginstal paket bukan file individual. Silakan baca semua golang.org/cmd/go dan lihat bagaimana mengatur file Anda.
Volker
terimakasih atas peringatannya!
pengguna3918985
2
Saya pikir Anda sedang mencari go build.
bunnybare
2
Saya tidak yakin saya setuju bahwa itu sepenuhnya salah. Saat GOBIN disetel, ada dua perilaku berbeda: Saat menggunakan go build <gofile.go>, executable dibuat di folder yang sama. Saat menggunakan go install <gofile.go> executable dibuat di GOBIN.
Erez A. Korn
2
FWIW - dokumen default untuk memulai merekomendasikan agar Anda melakukan hal ini. golang.org/doc/install
Mike Buckbee

Jawaban:

46

Pembaruan 2020: sejak Go 1.11 dan pengenalan modul Go , GOPATHtidak diperlukan lagi per proyek, dan default~/go untuk alat / proyek global yang Anda inginkango get .

Go 1.16 (Q1 2020) harus default GOBINke GOPATH[0]/bin .

Namun untuk saat ini, untuk setiap proyek yang menggunakan modul, Anda tidak akan mendapatkan pesan kesalahan seperti " go install: no install location ..." lagi.


Jawaban asli 2014:

Periksa GOPATHvariabel Anda .
Yakinkan:

  • sumber Anda ada di bawah GOPATH/src
  • Anda memiliki binfolder di dalam folder GOPATH Anda.

Lihat variabel lingkungan GOPATH (di mana 'DIR' adalah GOPATHfolder):

The bindirektori memegang perintah disusun.
Setiap perintah diberi nama untuk direktori sumbernya, tetapi hanya elemen terakhir, bukan seluruh jalur. Artinya, perintah dengan sumber di DIR/src/foo/quuxdiinstal ke DIR/bin/quux, bukan DIR/bin/foo/quux. foo/Awalan " " dihilangkan sehingga Anda dapat menambahkannya DIR/binke PATHperintah yang diinstal.

Jika GOBINvariabel lingkungan disetel, perintah diinstal ke direktori yang namanya bukan DIR/bin. GOBINharus menjadi jalan yang mutlak.


Misalnya, utas ini menggambarkan apa yang terjadi dalam kasus di mana go build dilakukan di luar GOPATH/src:

Sepertinya milik Anda GOPATHdisetel ke ~/gotetapi Anda menjalankan go installperintah pada~/dev/go

Lihat Go Build

Path Go adalah daftar pohon direktori yang berisi kode sumber Go. Ini dikonsultasikan untuk menyelesaikan impor yang tidak dapat ditemukan di pohon Go standar.

Jika sudah selesai go build, Anda juga dapat mencoba go install(tidak custom.go): Anda ingin menginstal paket, bukan satu file.

VonC
sumber
Maksudmu ini? Saya melakukan echo $ PATH dan mendapatkan ini: / Users / apple / bin: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin: / usr / local / go / bin: / usr / local / mysql / bin
pengguna3918985
76

Saya mengatur jalur GOBIN dan itu berhasil untuk saya

export GOBIN=[WorkspacePath]/bin
Pratik Goenka
sumber
2
ya, ini jawaban yang benar. cukup buat / bin di GOPATH itu
swdev
7
Setelah jalur ekspor, saya mendapat kesalahan cannot install, GOBIN must be an absolute path:(
lee
@lee Apakah Anda menggunakan ..atau ~di jalur yang Anda tentukan? Saya mendapat kesalahan itu dan baru saja beralih ke jalur absolut seperti /home/ben/bin/atau bahkan $HOME/bin/. Perintah lengkap saya adalah (di fishshell, go v1.11) env GOBIN=$HOME/bin/ go install testfile.go.
Benny Jobigan
40

Sebagai seorang pemula, saya menemukan kesalahan ini ketika saya mencoba berbagai perintah go (membangun, menjalankan, dan menginstal). Singkatnya, Anda tidak bisa pergi menginstal sebuah filename.go . Anda hanya dapat menginstal paket.

Ini membingungkan, karena saya telah mengetahui bahwa:

nate:~/work/src/dir $ go run hello/hello.go
hello, world.

bekerja dengan baik. Tetapi saya tidak tahu mengapa pemasangan tidak berhasil:

nate:~/work/src/dir $ go install hello/hello.go 
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
    /opt/go/src/hello (from $GOROOT)
    /home/ubuntu/work/src/hello (from $GOPATH)

Tidak peduli di direktori mana saya berada:

nate:~/work/src/dir $ cd hello
nate:~/work/src/dir/hello $ go install hello.go 
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir/hello $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
    /opt/go/src/hello (from $GOROOT)
    /home/ubuntu/work/src/hello (from $GOPATH)

Kebingungan ini karena go run hanya berfungsi dengan file sumber Go (nama file yang diakhiri dengan .go) dan go install hanya menerima paket. Paket diberi nama berdasarkan jalur impor atau jalur sistem file. Jadi:

nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .

semuanya bekerja dengan baik. Yang pertama merujuk ke paket dengan jalur impor, (mengingat bahwa $ GOPATH = "/ home / nate / work", alat go mencari kode sumber di / home / nate / work / src), yang lainnya diartikan sebagai sistem file jalur karena periode terkemuka.

Lihat juga dokumen GOPATH .

Nate Green
sumber
1
ini adalah solusi nyata IMO. go installbekerja pada direktori dan jika Anda menentukan file go tertentu, maka itu dapat menyebabkan masalah khusus ini.
senseiwu
13

Sebenarnya ada 2 macam perilaku.

go install <package>

ini didokumentasikan di Mengkompilasi dan menginstal paket dan dependensi. Anda tidak memerlukan GOBIN jika Anda menyetel GOPATH dengan benar.

go install <gofile>

ini tidak didokumentasikan dan Anda memerlukan variabel GOBIN env dalam mode ini.

PickBoy
sumber
1
go install <gofile>didokumentasikan, go help packagesyang go install --helpmengacu pada. Masalahnya adalah go install(di 1.9.2 dan yang lebih lama) memiliki perilaku yang tidak konsisten, dalam satu kasus diperlukan dan di kasus lain tidak memerlukan GOBIN untuk ditetapkan secara eksplisit.
Stevo Slavić
7

Seperti jawaban sebelumnya yang ditunjukkan, jika GOPATH env Anda disetel dengan benar ke ruang kerja Anda, Anda tidak perlu menyetel variabel env GOBIN.

Silakan periksa variabel go environment Anda dengan menjalankan $ go env | grep -i "^ GO" dan cari GOROOT dan GOPATH untuk memeriksa apakah GOROOT mengarah ke instalasi sumber GO Anda dan GOPATH mengarah ke ruang kerja Anda.

Jika semuanya sudah benar maka arahkan ke subdir tempat yourpkg.go berada kemudian jalankan $ go build (tanpa nama file) terlebih dahulu dan $ go install (lagi dengan nama file kami) kedua, jika Anda tidak melihat pesan kesalahan di layar Anda paket sudah siap di workspace / pkg / youros /../ yourpackage.a

pengguna42754
sumber
7

Pada windows dengan cygwin tampaknya merupakan ide yang bagus untuk mengatur GOBIN ke $ GOPATH / bin.

dan ingat untuk keluar dari pemisah nama file windows dengan benar:

$ echo $GOROOT
C:\Go\

carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOPATH
C:\cygwin64\home\carl\gocode

carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOBIN
C:\cygwin64\home\carl\gocode\bin
Carl Binding
sumber
5

Untuk *nixsistem, lihat di mana godiinstal, menjalankan perintah berikut:

$ which go

keluaran yang mana katakanlah:

/usr/local/go/bin/go

lalu tambahkan entri berikut di ~/.bash_profileatau di ~/.zshrc:

export GOROOT=/usr/local/go
export GOPATH=$GOROOT/src //your-go-workspace
export GOBIN=$GOROOT/bin //where go-generate-executable-binaries

PATH=$PATH:$GOPATH:$GOBIN

export PATH

PS: Jangan lupa untuk sumber ~/.bash_profileatau ~/.zshrc, sebagai berikut:

$ source ~/.bash_profile
Arpit Aggarwal
sumber
5
Apakah Anda benar-benar ingin file executable pengembangan dimasukkan /usr/local/go/bin?
Dolph
1

Mengenai menyetel GOBINversi variabel tidak memerlukannya dan hanya mengandalkan GOPATH:

  1. GOBINdiperlukan jika kita tidak memiliki paket, yaitu file tersebut langsung ada di GOPATHdirektori. Hal ini mungkin terjadi saat kami mencoba fitur Go sebagai pelajar

  2. Untuk proyek Go biasa, file-file tersebut berada di bawah direktori paket. Untuk ini, GOPATHsudah cukup baik.

  3. Dengan kata lain, kedua solusi berikut akan berhasil: a. Tetapkan GOBINsecara eksplisit sebagai $ GOPATH / bin [hanya untuk tujuan pembelajaran, dapat dihindari] b. Buat subdirektori yang akan menjadi nama paket Anda dan pindahkan file .go ke dalamnya

  4. Saya kira utilitas Go harus menghapus kesalahan di atas dan menangani skenario dengan lebih baik - berdasarkan apakah argumennya adalah direktori atau file sumber

pr-sobat
sumber
1

Untuk WINDOWS pengguna

Buka prompt perintah ( Win+ rlalu ketik cmd) atau jendela PowerShell ( Win+ xlalu ketiki ).

Mengatur GOPATH

CATATAN: GOPATH tidak boleh berada di jalur yang sama dengan instalasi Go Anda.

go env -w GOPATH=c:\your-go-work

Detail selengkapnya ada di tautan di bawah ini https://github.com/golang/go/wiki/SettingGOPATH#windows

Menyetel GOBIN

go env -w GOBIN=C:\somewhere\else\bin

Saya sarankan untuk memeriksa contoh kode yang diberikan oleh golang. Itu sangat membantu saya. https://golang.org/doc/code.html#Command

Henry
sumber
1

Di Windows:

go env -w GOBIN=C:\Users\yourname\go\bin

Konfirmasikan dengan go envperintah bahwa GOBIN telah diatur, kemudian go installperintah dengan benar menyimpan file yang dapat dieksekusi dengan benar di direktori bin.

Frankie Wong
sumber
1

Saya juga mengalami masalah yang sama (GOBIN tidak perlu disetel secara terpisah), pastikan Anda memiliki yang berikut ini

  1. GOPATH disetel (ini juga secara otomatis menyetel GOBIN sebagai $ GOPATH / bin)
  2. GOPATH memiliki direktori berikut bin, pkg, src
  3. custom.go ditempatkan di bawah src / <your_module>
  4. lalu lari go install <your_module>
  5. Anda dapat menemukan cek untuk biner terkompilasi (<modul_anda>) di bawah folder bin
Manjunath Bhadrannavar
sumber
0

Anda tidak memerlukan $ GOBIN jika Anda telah menyetel $ GOPATH dengan benar. Jika demikian, cukup periksa ulang apakah proyek Anda berada di folder $ GOPATH / src .

theVoogie
sumber
0

Dari https://golang.org/cmd/go/#hdr-Environment_variables :

GOBIN Direktori tempat 'go install' akan menginstal sebuah perintah.

dan https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :

Jika variabel lingkungan GOBIN disetel, perintah diinstal ke direktori yang dinamai sebagai ganti DIR / bin. GOBIN harus menjadi jalur mutlak.

dan https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more

Dalam mode berbasis modul, GOPATH tidak lagi mendefinisikan arti impor selama build, tetapi masih menyimpan dependensi yang diunduh (dalam GOPATH / pkg / mod) dan perintah yang diinstal (dalam GOPATH / bin, kecuali GOBIN disetel).

Jadi, pada dasarnya Anda dapat menggunakan GOBIN untuk mengganti sementara atau permanen lokasi pemasangan biner default (mis $GOPATH/bin.). Saya berhasil menginstal 1-file go "script" menggunakan env GOBIN=$HOME/bin/ go install testfile.go. Ini dilakukan menggunakan go v1.11.

Benny Jobigan
sumber
0

Mencoba

export GOROOT=""

export PATH=$PATH:$GOROOT/bin

Thiên Trần
sumber