Bagaimana Go memperbarui paket pihak ketiga?

190

Melihat seberapa aktif paket-paket golang tumbuh dan meningkat, saya bertanya-tanya bagaimana masalah dengan versi-versi paket diselesaikan?

Saya melihat bahwa salah satu caranya adalah dengan menyimpan paket pihak ketiga di bawah folder proyek.

Tetapi bagaimana jika saya menginstalnya go get?

shalakhin
sumber

Jawaban:

311

go getakan menginstal paket di direktori pertama yang terdaftar di GOPATH(variabel lingkungan yang mungkin berisi daftar direktori yang dipisahkan oleh titik dua). Anda dapat menggunakan go get -uuntuk memperbarui paket yang ada.

Anda juga dapat menggunakan go get -u alluntuk memperbarui semua paket diGOPATH

Untuk proyek yang lebih besar, mungkin masuk akal untuk membuat GOPATH yang berbeda untuk setiap proyek, sehingga memperbarui perpustakaan di proyek A tidak akan menyebabkan masalah dalam proyek B.

Ketik go help gopathuntuk mencari tahu lebih lanjut tentang GOPATHvariabel lingkungan.

tux21b
sumber
2
apakah mungkin untuk memperbarui semua paket ke versi terbaru, semacam pembaruan bundel seperti?
chourobin
73
seharusnya hanya go get -u all menyesal untuk bangkit, tapi kalau-kalau ada orang lain yang melihat.
Dan Anderson
go get -u alltidak lagi berfungsi! Menjalankan perintah ini di GOPATH, setidaknya untuk Go 1.13, akan memberikan peringatan: `peringatan" semua "tidak cocok dengan paket"
Contrapak
Bekerja dengan Go 1.12.9
fviktor
61

@tux answer is great, hanya ingin menambahkan bahwa Anda dapat menggunakan pergi untuk memperbarui paket tertentu:

go get -u full_package_name
Salvador Dali
sumber
18

Karena pertanyaan tersebut menyebutkan pustaka pihak ketiga dan tidak semua paket maka Anda mungkin ingin kembali menggunakan wildcard.

Kasus penggunaan adalah: Saya hanya ingin memperbarui semua paket saya yang diperoleh dari Github VCS, maka Anda hanya akan mengatakan:

go get -u github.com/... // ('...' being the wildcard). 

Ini akan berlanjut dan hanya memperbarui paket github Anda saat ini $GOPATH

Hal yang sama berlaku untuk dalam VCS juga, katakan Anda hanya ingin memutakhirkan semua paket dari repo ogranizaiton A karena karena mereka telah merilis perbaikan terbaru yang Anda andalkan:

go get -u github.com/orgA/...
dtx
sumber
11

Jawaban di atas memiliki masalah berikut:

  1. Mereka memperbarui semuanya termasuk aplikasi Anda (jika Anda memiliki perubahan yang tidak dikomit).
  2. Mereka memperbarui paket yang mungkin sudah Anda hapus dari proyek Anda tetapi sudah ada di disk Anda.

Untuk menghindari ini, lakukan hal berikut:

  1. Hapus folder pihak ke-3 yang ingin Anda perbarui.
  2. buka folder aplikasi Anda dan jalankan go get -d
Aus
sumber
2

lanjutkan 1.13

(exec dari direktori root modul)

Perbarui dependensi yang ditentukan:

go get -u <package-name>

Perbarui semua dependensi langsung dan tidak langsung ke peningkatan minor atau patch terbaru (pra-rilis diabaikan):

go get -u ./...
# or
go get -u=patch ./...

Referensi:

https://github.com/golang/go/wiki/Modules#daily-workflow

go help get

F566
sumber
-2

Pergi ke jalur dan ketik

go get -u ./..

Ini akan memperbarui semua paket yang dibutuhkan.

kiki_ygn
sumber
Penafsiran literal ini tidak berhasil. Lebih banyak konteks akan membantu.
Contrapak
2
Saya percaya maksudnya go get -u ./...(3 titik)
Brian Leishman