Làm thế nào để cập nhật các gói của bên thứ ba?


189

Nhìn cách các gói golang tích cực phát triển và cải thiện Tôi tự hỏi làm thế nào vấn đề với các phiên bản gói được giải quyết?

Tôi thấy rằng một cách là lưu trữ các gói của bên thứ ba trong một thư mục dự án.

Nhưng nếu tôi cài đặt nó thì go getsao?

Câu trả lời:


308

go getsẽ cài đặt gói trong thư mục đầu tiên được liệt kê tại GOPATH(một biến môi trường có thể chứa danh sách các thư mục được phân tách bằng dấu hai chấm). Bạn có thể sử dụng go get -uđể cập nhật các gói hiện có.

Bạn cũng có thể sử dụng go get -u allđể cập nhật tất cả các gói trongGOPATH

Đối với các dự án lớn hơn, có thể hợp lý khi tạo các GOPATH khác nhau cho mỗi dự án, để việc cập nhật thư viện trong dự án A sẽ không gây ra sự cố trong dự án B.

Nhập go help gopathđể tìm hiểu thêm về GOPATHbiến môi trường.


2
Có thể cập nhật tất cả các gói lên phiên bản mới nhất, loại cập nhật như gói không?
chourobin

73
chỉ nên go get -u all xin lỗi để hồi sinh, nhưng chỉ trong trường hợp bất cứ ai khác đang tìm kiếm.
Dan Anderson

go get -u allcông việc ngắn hạn! Chạy lệnh này trong GOPATH, ít nhất là cho Go 1.13, sẽ trả về một cảnh báo: `cảnh báo" tất cả "khớp không có gói nào"
Contrapak

Hoạt động với Go 1.12.9
fviktor

61

@tux trả lời là tuyệt vời, chỉ muốn thêm rằng bạn có thể sử dụng go get để cập nhật một gói cụ thể:

go get -u full_package_name

18

Vì câu hỏi đã đề cập đến các thư viện của bên thứ ba và không phải tất cả các gói nên bạn có thể muốn quay lại sử dụng các ký tự đại diện.

Một trường hợp sử dụng là: Tôi chỉ muốn cập nhật tất cả các gói được lấy từ Github VCS, sau đó bạn chỉ cần nói:

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

Điều này sẽ đi trước và chỉ cập nhật các gói github của bạn trong hiện tại $GOPATH

Áp dụng tương tự cho bên trong một VCS, giả sử bạn chỉ muốn nâng cấp tất cả các gói từ repo của ogranizaiton A vì họ đã phát hành một hotfix mà bạn phụ thuộc vào:

go get -u github.com/orgA/...

11

Các câu trả lời trên có các vấn đề sau:

  1. Họ cập nhật mọi thứ bao gồm cả ứng dụng của bạn (trong trường hợp bạn có những thay đổi không được cam kết).
  2. Họ đã cập nhật các gói bạn có thể đã xóa khỏi dự án của bạn nhưng đã có trên đĩa của bạn.

Để tránh những điều này, hãy làm như sau:

  1. Xóa các thư mục bên thứ 3 mà bạn muốn cập nhật.
  2. đi đến thư mục ứng dụng của bạn và chạy go get -d

1

đi 1,13

(thực hiện từ thư mục gốc mô-đun)

Cập nhật các phụ thuộc được chỉ định:

go get -u <package-name>

Cập nhật tất cả các phụ thuộc trực tiếp và gián tiếp lên các bản nâng cấp nhỏ hoặc vá mới nhất (bản phát hành trước bị bỏ qua):

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

Tài liệu tham khảo:

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

go help get



-2

Đi đến đường dẫn và gõ

go get -u ./..

Nó sẽ cập nhật tất cả các gói yêu cầu.


Giải thích nghĩa đen này không hoạt động. Một số bối cảnh sẽ hữu ích.
Contrapak

2
Tôi tin rằng anh ấy có nghĩa là go get -u ./...(3 chấm)
Brian Leishman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.