Loại bỏ các gói được cài đặt với go get


227

Tôi đã chạy go get packageđể tải xuống một gói trước khi biết rằng tôi cần phải thiết lập GOPATHgói khác của mình để cài đặt gốc Go của tôi (tôi rất thích giữ cho cài đặt Go của tôi sạch và tách lõi khỏi tùy chỉnh). Làm cách nào để xóa các gói đã cài đặt trước đó?


2
Đối với những người sử dụng mô-đun Go stackoverflow.com/questions/57186705/ từ
jesugmz

Câu trả lời:


187

Chỉ cần xóa thư mục nguồn và tệp gói được biên dịch. Tìm thư mục nguồn bên dưới $GOPATH/srcvà tệp gói bên dưới $GOPATH/pkg/<architecture>, ví dụ : $GOPATH/pkg/windows_amd64.


5
Lúc đầu, tôi tìm kiếm $ GOPATH / pkg / architecture / không tồn tại. Sau đó, tôi nhận ra rằng những gì bạn đang đề cập đến là $ GOPATH / pkg / {{architecture}}, ví dụ $ GOPATH / pkg / windows_amd64.
Hạt nhân

1
Giá trị mặc định GOPATH/usr/lib/go.
Flimm

246
Nếu nó an toàn và đơn giản, tại sao không có tiểu ban nào đi được?
Bengt

71
đến từ npm, chúng tôi còn có nhiều hơn nữago
slf

4
Trên máy Mac: $ GOPATH = $ HOME / đi
Ricardo Martins

152

Bạn có thể xóa các tệp lưu trữ và các tệp nhị phân thực thi mà go install(hoặc go get) tạo ra cho một gói với go clean -i importpath.... Chúng thường nằm dưới $GOPATH/pkg$GOPATH/bin, tương ứng.

Hãy chắc chắn bao gồm ...trên đường dẫn nhập khẩu, vì có vẻ như, nếu một gói bao gồm một tệp thực thi, go clean -isẽ chỉ loại bỏ tệp đó và không lưu trữ các tệp cho các gói con, như gore/gocodetrong ví dụ dưới đây.

Mã nguồn sau đó cần phải được gỡ bỏ bằng tay từ $GOPATH/src.

go cleancó một -ncờ cho một lần chạy khô in ra những gì sẽ được chạy mà không thực hiện nó, vì vậy bạn có thể chắc chắn (xem go help clean). Nó cũng có một -rlá cờ hấp dẫn để làm sạch đệ quy các phụ thuộc mà bạn có thể không thực sự muốn sử dụng vì bạn sẽ thấy trong một lần chạy khô rằng nó sẽ xóa rất nhiều tệp lưu trữ thư viện tiêu chuẩn!

Một ví dụ hoàn chỉnh, mà bạn có thể dựa vào một tập lệnh nếu bạn muốn:

$ go get -u github.com/motemen/gore

$ which gore
/Users/ches/src/go/bin/gore

$ go clean -i -n github.com/motemen/gore...
cd /Users/ches/src/go/src/github.com/motemen/gore
rm -f gore gore.exe gore.test gore.test.exe commands commands.exe commands_test commands_test.exe complete complete.exe complete_test complete_test.exe debug debug.exe helpers_test helpers_test.exe liner liner.exe log log.exe main main.exe node node.exe node_test node_test.exe quickfix quickfix.exe session_test session_test.exe terminal_unix terminal_unix.exe terminal_windows terminal_windows.exe utils utils.exe
rm -f /Users/ches/src/go/bin/gore
cd /Users/ches/src/go/src/github.com/motemen/gore/gocode
rm -f gocode.test gocode.test.exe
rm -f /Users/ches/src/go/pkg/darwin_amd64/github.com/motemen/gore/gocode.a

$ go clean -i github.com/motemen/gore...

$ which gore

$ tree $GOPATH/pkg/darwin_amd64/github.com/motemen/gore
/Users/ches/src/go/pkg/darwin_amd64/github.com/motemen/gore

0 directories, 0 files

# If that empty directory really bugs you...
$ rmdir $GOPATH/pkg/darwin_amd64/github.com/motemen/gore

$ rm -rf $GOPATH/src/github.com/motemen/gore

Lưu ý rằng thông tin này dựa trên gocông cụ trong phiên bản Go 1.5.1.


2
Làm thế nào để bạn tìm thấy tất cả các phụ thuộc dự án?
Michael Mallett

5
#!/bin/bash

goclean() {
 local pkg=$1; shift || return 1
 local ost
 local cnt
 local scr

 # Clean removes object files from package source directories (ignore error)
 go clean -i $pkg &>/dev/null

 # Set local variables
 [[ "$(uname -m)" == "x86_64" ]] \
 && ost="$(uname)";ost="${ost,,}_amd64" \
 && cnt="${pkg//[^\/]}"

 # Delete the source directory and compiled package directory(ies)
 if (("${#cnt}" == "2")); then
  rm -rf "${GOPATH%%:*}/src/${pkg%/*}"
  rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*}"
 elif (("${#cnt}" > "2")); then
  rm -rf "${GOPATH%%:*}/src/${pkg%/*/*}"
  rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*/*}"
 fi

 # Reload the current shell
 source ~/.bashrc
}

Sử dụng:

# Either launch a new terminal and copy `goclean` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

goclean github.com/your-username/your-repository
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.