Pertanyaan Go build: "Tidak dapat menemukan paket" (meskipun GOPATH sudah diatur)


Meskipun saya telah mengatur GOPATH dengan benar, saya masih tidak bisa "pergi membangun" atau "lari" untuk menemukan paket saya sendiri. Apa yang saya lakukan salah? Terima kasih banyak!

$ echo $GOROOT
/usr/local/go

$ echo $GOPATH
/home/mitchell/go

$ cat ~/main.go
package main
import "foobar"
func main() { }

$ cat /home/mitchell/go/src/foobar.go
package foobar

$ go build main.go
main.go:3:8: import "foobar": cannot find package

76
2017-11-03 22:15


asal


Jawaban:


Itu tidak berhasil karena Anda foobar.go file sumber tidak dalam direktori bernama foobar. go build dan go install mencoba untuk mencocokkan direktori, bukan file sumber.

  1. Set $GOPATH ke direktori yang valid, mis. export GOPATH="$HOME/go"
  2. Pindah foobar.go untuk $GOPATH/src/foobar/foobar.go dan bangunan harus berfungsi dengan baik.

Langkah-langkah tambahan yang disarankan:

  1. Menambahkan $GOPATH/bin untuk Anda $PATH oleh: PATH="$GOPATH/bin:$PATH"
  2. Pindah main.go ke subfolder dari $GOPATH/src, mis. $GOPATH/src/test
  3. go install test sekarang harus membuat dieksekusi di $GOPATH/bin yang bisa dipanggil dengan mengetik test ke terminal Anda.

101
2017-11-04 22:26



Edit: karena Anda berarti GOPATH, lihat fasmat's menjawab (upvoted)

Seperti yang disebutkan dalam "Bagaimana cara saya menemukan paket saya?", Anda harus memasukkan paket xxx dalam sebuah direktori xxx.

Lihat Pergi spesifikasi bahasa:

package math

Satu set file berbagi yang sama PackageName membentuk implementasi paket.
  Suatu implementasi mungkin mengharuskan semua file sumber untuk paket menghuni direktori yang sama.

Itu Organisasi kode menyebutkan:

Saat membuat program yang mengimpor paket "widget"itu go perintah mencari src/pkg/widget di dalam root Go, dan kemudian — jika sumber paket tidak ditemukan di sana — ia mencari src/widget di dalam setiap ruang kerja secara berurutan.

("ruang kerja" adalah entri jalur di Anda GOPATH: variabel itu dapat mereferensikan beberapa jalur untuk Anda 'src, bin, pkg' menjadi)


(Jawaban asli)

Anda juga harus mengatur GOPATH untuk ~ / pergi, tidak GOROOT, seperti yang digambarkan dalam "Cara Menulis Kode Go".

Jalur Go digunakan untuk menyelesaikan pernyataan impor. Ini diterapkan oleh dan didokumentasikan dalam paket go / build.

Itu GOPATH variabel lingkungan daftar tempat untuk mencari kode Go.
  Pada Unix, nilainya adalah string yang dipisahkan oleh titik dua.
  Pada Windows, nilainya adalah string yang dipisahkan dengan titik koma.
  Pada Plan 9, nilainya adalah daftar.

Itu berbeda dari GOROOT:

Distribusi biner Go mengasumsikan bahwa mereka akan diinstal /usr/local/go (atau c:\Go di bawah Windows), tetapi mungkin untuk menginstalnya di lokasi yang berbeda.
  Jika Anda melakukan ini, Anda harus mengaturnya GOROOT variabel lingkungan ke direktori itu saat menggunakan alat Go.


7
2017-11-03 22:30



TL; DR: Ikuti konvensi Go! (Pelajaran belajar dengan cara yang keras), periksa versi go lama dan menghapus mereka. Instal terbaru.

Bagi saya solusinya berbeda. Saya bekerja di server Linux bersama dan setelah memverifikasi saya GOPATH dan variabel lingkungan lainnya beberapa kali masih tidak berhasil. Saya mengalami beberapa kesalahan termasuk 'Tidak dapat menemukan paket' dan 'jalur impor tidak dikenal'. Setelah mencoba menginstal ulang dengan ini solusi dengan instruksi di golang.org (termasuk uninstall bagian) masih mengalami masalah.

Aku butuh waktu untuk menyadari bahwa masih ada versi lama yang belum dihapus (berjalan go version kemudian which go lagi ... DAHH) yang membuat saya begitu ini pertanyaan dan akhirnya dipecahkan.


2
2018-01-31 07:43



Sudahkah Anda mencoba menambahkan direktori absolut dari pergi ke 'jalur' Anda?

export PATH=$PATH:/directory/to/go/

-2
2017-11-04 08:53