2014-07-22 14 views
30

Sau khi tìm kiếm và chơi với các công cụ go một thời gian, nó trông giống như go get:Sự khác nhau giữa việc đi và cài đặt là gì?

  1. (tùy chọn) tải về,
  2. biên dịch,
  3. và cài đặt

một phần của phần mềm , trong khi go install chỉ đơn giản là

  1. biên dịch
  2. và cài đặt

. Trong trường hợp này, tại sao lệnh go install tồn tại, vì go get thay thế nó?

Trả lời

32

go install là một phần của quy trình làm việc khi làm việc cục bộ. Giả sử bạn muốn sử dụng thư viện, nhưng vì lý do nào đó, thay đổi là bắt buộc. Bạn sẽ làm:

  • go get -d library, chỉ tải xuống;
  • thực hiện thay đổi đối với gói đã tải xuống;
  • go install library để cài đặt phiên bản cục bộ.

Theo như tôi biết go get không có cờ để chỉ ra nó nên không tải, vì vậy nó không thể thay thế go install đây.

Quy trình làm việc tương tự được sử dụng khi bạn phát triển gói mới từ đầu.

+1

Tốt, tôi nghĩ giờ đây tôi đã hiểu được nhờ ví dụ đầu tiên của bạn. Tuy nhiên, trong phần thứ hai của bạn (phát triển một gói mới từ đầu), tôi có thể sử dụng 'go get./Path/to/local_package', và nó sẽ hoạt động giống như tôi đã sử dụng' go install ./path/to/local_package ', đúng không? Vì không có quá trình tải xuống trong trường hợp này. – thiagowfx

+0

'go install' làm cho mục tiêu của bạn rõ ràng hơn, nhưng tôi cho rằng cả hai sẽ đạt được điều tương tự. Tôi đã thử nghiệm với một vài gói, bao gồm các gói được khai báo là 'main' và chúng có vẻ tương đương. Các tài liệu rất thiếu về lệnh này. – BoppreH

+0

[Ở đây] (https://github.com/mattn/go-sqlite3/blob/master/README.md#installation) nó nói, bạn cần gcc cho 'go get' nhưng không cho' go install'. Điều đó liên quan đến mô tả này như thế nào? – AndreKR

2

go get thực hiện hai điều chính theo thứ tự này:

  • tải về và lưu trong GOPATH/src/<import-path> các gói (mã nguồn) có tên trong những con đường nhập khẩu, cùng với sự phụ thuộc của họ, sau đó

  • thực hiện một go install

Cờ -d (go get -d) chỉ thị go get dừng sau khi tải xuống các gói; có nghĩa là, nó chỉ thị go get không làm go install


sự khác biệt:

go get // kiểm tra xem gói cần phải được tải về, tải về nếu cần thiết sau đó biên dịch

go install// bỏ qua phần tải xuống gói, chỉ cần biên dịch (điều này sẽ ném một lỗi nếu có bất kỳ gói nào bị thiếu)


về GOPATH biến môi trường

Biến môi trường GOPATH phải được thiết lập để có thể get, buildinstall gói, và nó xác định vị trí của không gian làm việc của bạn. Đó có thể là biến môi trường duy nhất bạn sẽ cần phải đặt khi phát triển mã Go.

Một lần nữa, GOPATH không được trỏ đến cài đặt Go mà là không gian làm việc của bạn.

Ví dụ, trên Windows, nếu bạn quyết định rằng không gian làm việc của bạn là ở c:\gowork\, bạn sẽ cần phải thiết lập GOPATH giá trị như c:\gowork

enter image description here

mã nguồn của bạn nên có ít c:\gowork\src\<some project folder>\ và sau khi bạn chạy go get tại dấu nhắc lệnh từ trong số c:\gowork\src\<some project folder>\, bạn sẽ thấy c:\gowork\bin\c:\gowork\pkg\ đang được tạo.

Các vấn đề liên quan