Làm cách nào để cài đặt gói với go get?


133

Tôi muốn cài đặt các gói từ github vào gopath của mình, tôi đã thử điều này:

go get github.com:capotej/groupcache-db-experiment.git

kho lưu trữ ở đây .


4
Nếu bạn có một lỗi với lệnh này, loại bỏ .gitở cuối dòng:go get github.com:capotej/groupcache-db-experiment
Benyamin Jafari

Câu trả lời:


120

Ra lệnh

Tải xuống và cài đặt các gói và phụ thuộc

Sử dụng:

go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]

Tải xuống các gói được đặt tên theo đường dẫn nhập, cùng với các gói phụ thuộc của chúng. Sau đó, nó sẽ cài đặt các gói được đặt tên, như 'go install'.

Cờ -d hướng dẫn dừng lại sau khi tải xuống các gói; nghĩa là, nó hướng dẫn không được cài đặt các gói.

Cờ -f, chỉ hợp lệ khi -u được đặt, buộc get -u không xác minh rằng mỗi gói đã được kiểm tra từ kho lưu trữ kiểm soát nguồn được ngụ ý bởi đường dẫn nhập của nó. Điều này có thể hữu ích nếu nguồn là một nhánh cục bộ của bản gốc.

Cờ -fix hướng dẫn chạy công cụ sửa lỗi trên các gói đã tải xuống trước khi giải quyết các phần phụ thuộc hoặc xây dựng mã.

Cờ -insecure cho phép tìm nạp từ các kho lưu trữ và giải quyết các miền tùy chỉnh bằng cách sử dụng các lược đồ không an toàn như HTTP. Sử dụng cẩn thận.

Cờ -t hướng dẫn cũng tải xuống các gói cần thiết để xây dựng các bài kiểm tra cho các gói được chỉ định.

Cờ -u hướng dẫn sử dụng mạng để cập nhật các gói được đặt tên và các gói phụ thuộc của chúng. Theo mặc định, get sử dụng mạng để kiểm tra các gói bị thiếu nhưng không sử dụng mạng để tìm kiếm các bản cập nhật cho các gói hiện có.

Cờ -v cho phép tiến trình chi tiết và đầu ra gỡ lỗi.

Get cũng chấp nhận cờ xây dựng để kiểm soát cài đặt. Xem 'go help build'.

Khi kiểm tra một gói mới, get tạo thư mục đích GOPATH / src /. Nếu GOPATH chứa nhiều mục nhập, get sử dụng mục nhập đầu tiên. Để biết thêm chi tiết, hãy xem: 'go help gopath'.

Khi kiểm tra hoặc cập nhật một gói, hãy tìm một nhánh hoặc thẻ phù hợp với phiên bản Go được cài đặt cục bộ. Quy tắc quan trọng nhất là nếu cài đặt cục bộ đang chạy phiên bản "go1", hãy tìm kiếm một nhánh hoặc thẻ có tên "go1". Nếu không có phiên bản nào như vậy tồn tại, nó sẽ truy xuất nhánh mặc định của gói.

Khi kiểm tra hoặc cập nhật kho lưu trữ Git, nó cũng cập nhật bất kỳ mô-đun con git nào được kho lưu trữ tham chiếu.

Không bao giờ kiểm tra hoặc cập nhật mã được lưu trữ trong thư mục của nhà cung cấp.

Để biết thêm về việc chỉ định gói, hãy xem 'gói trợ giúp'.

Để biết thêm về cách 'go get' tìm mã nguồn để tải xuống, hãy xem 'go help importpath'.

Văn bản này mô tả hành vi của get khi sử dụng GOPATH để quản lý mã nguồn và phần phụ thuộc. Thay vào đó, nếu lệnh go đang chạy ở chế độ nhận biết mô-đun, các chi tiết của cờ và hiệu ứng của get sẽ thay đổi, cũng như 'go help get'. Xem 'go help module' và 'go help module-get'.

Xem thêm: go build, go install, go clean.


Ví dụ: hiển thị đầu ra dài dòng,

$ go get -v github.com/capotej/groupcache-db-experiment/...
github.com/capotej/groupcache-db-experiment (download)
github.com/golang/groupcache (download)
github.com/golang/protobuf (download)
github.com/capotej/groupcache-db-experiment/api
github.com/capotej/groupcache-db-experiment/client
github.com/capotej/groupcache-db-experiment/slowdb
github.com/golang/groupcache/consistenthash
github.com/golang/protobuf/proto
github.com/golang/groupcache/lru
github.com/capotej/groupcache-db-experiment/dbserver
github.com/capotej/groupcache-db-experiment/cli
github.com/golang/groupcache/singleflight
github.com/golang/groupcache/groupcachepb
github.com/golang/groupcache
github.com/capotej/groupcache-db-experiment/frontend
$ 

17
Nếu điều này giúp ích cho bất kỳ ai, giải pháp cho vấn đề của tôi ( package github.com/coreos/go-iptables.git: invalid version control suffix in github.com/ path) là xóa .githậu tố khỏi URL Github.
Excalibur

6
những gì -vlàm gì?
yu yang Jian

3
@yuyangJian nó có nghĩa là đầu ra dài dòng.
omrsin

3
tình yêu như thế nào -vlệnh không được nhắc đến trong danh sách đó lol FML ... chắc chắn nó có nghĩa là tiết tho
Alexander Mills

2
Làm thế nào để bạn chạy nó khi bạn đã sử dụng go get?
acjay

75

Đầu tiên, chúng ta cần GOPATH

$GOPATHmột thư mục (hoặc tập hợp các thư mục) được chỉ định bởi biến môi trường của nó. Chúng ta phải lưu ý rằng đây không phải là $GOROOTthư mục mà Go được cài đặt.

export GOPATH=$HOME/gocode
export PATH=$PATH:$GOPATH/bin

Chúng tôi đã sử dụng ~/gocodeđường dẫn trong máy tính của mình để lưu trữ nguồn ứng dụng của chúng tôi và các phụ thuộc của nó. Thư mục GOPATHcũng sẽ lưu trữ các tệp nhị phân của các gói của chúng.

Sau đó kiểm tra Go env

Hệ thống của bạn phải có $GOPATH$GOROOTdưới đây là Env của tôi:

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/elpsstu/gocode"
GORACE=""
GOROOT="/home/pravin/go"
GOTOOLDIR="/home/pravin/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

Bây giờ, bạn chạy gói tải xuống go:

go get [-d] [-f] [-fix] [-t] [-u] [build flags] [packages]

Tải xuống và cài đặt các gói được đặt tên theo đường dẫn nhập, cùng với các gói phụ thuộc của chúng. Để biết thêm chi tiết, bạn có thể xem tại đây .


1
môi trường đi của tôi đã ổn, nhưng tôi không quen thuộc với các quy tắc của go get, vì vậy github.com:capotej/groupcache-db-experiment.gitkhông phải là bất hợp pháp, con đường hợp pháp là gì?
roger

2
Hãy thử truy cập -v github.com/capotej/groupcache-db-experiment / ... như @peterSO đã nói
Pravin Mishra

1
Bắt đầu với Go v1.8, GOPATHmặc định là $HOME/gonếu không được đặt. Nguồn 1 , 2 .
Manavalan Gajapathy
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.