เอาแพ็คเกจที่ติดตั้งไปด้วย


227

ฉันวิ่งgo get packageไปดาวน์โหลดแพ็คเกจก่อนที่จะเรียนรู้ว่าฉันจำเป็นต้องตั้งค่าGOPATHมิฉะนั้นแพ็คเกจนั้นจะติดตั้งรูทของฉันไป (ฉันอยากจะติดตั้ง Go ของฉันให้สะอาดและแยกคอร์จากที่กำหนดเอง) ฉันจะลบแพ็กเกจที่ติดตั้งไว้ก่อนหน้านี้ได้อย่างไร


2
สำหรับผู้ที่ใช้ Go modules stackoverflow.com/questions/57186705/…
jesugmz

คำตอบ:


187

การลบไดเรกทอรีต้นทางและไฟล์แพคเกจที่คอมไพล์แล้วนั้นปลอดภัย ค้นหาไดเรกทอรีที่มาภายใต้$GOPATH/srcและแฟ้มแพคเกจภายใต้ตัวอย่างเช่น:$GOPATH/pkg/<architecture>$GOPATH/pkg/windows_amd64


5
ตอนแรกฉันมองหา $ GOPATH / pkg / architecture / ซึ่งไม่มีอยู่ จากนั้นฉันก็รู้ว่าสิ่งที่คุณอ้างถึงคือ $ GOPATH / pkg / {{architecture}} ตัวอย่างเช่น $ GOPATH / pkg / windows_amd64
คลีออน

1
ค่าเริ่มต้นของมีGOPATH /usr/lib/go
Flimm

245
ถ้าปลอดภัยและเรียบง่ายทำไมไม่มีคำสั่งย่อย go ที่ทำ?
Bengt

71
มาจาก npm เรามีอีกมากที่จะgo
slf

4
สำหรับ Mac: $ GOPATH = $ HOME / go
Ricardo Martins

152

คุณสามารถลบไฟล์ที่เก็บและไบนารีปฏิบัติการที่go install(หรือgo get) go clean -i importpath...ผลิตสำหรับแพคเกจที่มี โดยปกติจะอยู่ภายใต้$GOPATH/pkgและ$GOPATH/binตามลำดับ

ตรวจสอบให้แน่ใจว่าได้รวม...ไว้ใน importpath เนื่องจากปรากฏว่าหากแพคเกจประกอบด้วยไฟล์ที่เรียกทำงานได้go clean -iจะลบและไม่เก็บไฟล์สำหรับแพ็คเกจย่อยเช่นgore/gocodeในตัวอย่างด้านล่าง

$GOPATH/srcรหัสที่มาแล้วจะต้องออกด้วยตนเองจาก

go cleanมี-nแฟล็กสำหรับการรันแบบแห้งที่พิมพ์สิ่งที่จะรันโดยไม่เรียกใช้งานดังนั้นคุณสามารถมั่นใจได้ (ดูgo help clean) นอกจากนี้ยังมีการ-rตั้งค่าสถานะที่ดึงดูดให้ล้างการอ้างอิงซ้ำซึ่งคุณอาจไม่ต้องการใช้จริงเนื่องจากคุณจะเห็นจากการรันแบบแห้งซึ่งจะลบไฟล์เก็บถาวรไลบรารีมาตรฐานจำนวนมาก!

ตัวอย่างที่สมบูรณ์ซึ่งคุณสามารถวางสคริปต์ไว้ได้หากคุณต้องการ:

$ 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

โปรดทราบว่าข้อมูลนี้เป็นไปตามgoเครื่องมือในรุ่น Go 1.5.1


2
คุณจะพบการพึ่งพาโครงการทั้งหมดได้อย่างไร
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
}

การใช้งาน:

# 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.