Eliminar paquetes instalados con go get


227

Corrí go get packagepara descargar un paquete antes de saber que necesitaba configurar mi GOPATHpaquete; de ​​lo contrario, ese paquete daña mi instalación de Go root (preferiría mantener mi instalación Go limpia y separar el núcleo de la costumbre). ¿Cómo elimino los paquetes instalados anteriormente?


2
Para aquellos que usan módulos Go stackoverflow.com/questions/57186705/…
jesugmz

Respuestas:


187

Es seguro simplemente eliminar el directorio fuente y el archivo del paquete compilado. Encuentra el directorio de origen bajo $GOPATH/srcy el archivo de paquete bajo $GOPATH/pkg/<architecture>, por ejemplo: $GOPATH/pkg/windows_amd64.


55
Al principio busqué $ GOPATH / pkg / architecture / que no existía. Entonces me di cuenta de que a lo que te referías era a $ GOPATH / pkg / {{architecture}}, por ejemplo $ GOPATH / pkg / windows_amd64.
Nucleon

1
El valor predeterminado de GOPATHes /usr/lib/go.
Flimm

246
Si es seguro y simple, ¿por qué no hay un subcomando go que lo haga?
Bengt

71
viniendo de npm, tenemos mucho más parago
slf

44
En Mac: $ GOPATH = $ HOME / go
Ricardo Martins

152

Puede eliminar los archivos de almacenamiento y los archivos binarios ejecutables que go install(o go get) produce para un paquete con go clean -i importpath.... Estos normalmente residen bajo $GOPATH/pkgy $GOPATH/bin, respectivamente.

Asegúrese de incluir ...en la ruta de importación, ya que parece que, si un paquete incluye un ejecutable, go clean -isolo eliminará eso y no archivará archivos para subpaquetes, comogore/gocode en el ejemplo a continuación.

El código fuente debe eliminarse manualmente de $GOPATH/src.

go cleantiene una -nbandera para una ejecución en seco que imprime lo que se ejecutará sin ejecutarlo, por lo que puede estar seguro (ver go help clean). También tiene un -rindicador tentador para limpiar recursivamente las dependencias, lo que probablemente no quieras usar, ya que verás en una ejecución en seco que eliminará muchos archivos de biblioteca estándar.

Un ejemplo completo, en el que podría basar un script si lo desea:

$ 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

Tenga en cuenta que esta información se basa en la goherramienta en Go versión 1.5.1.


2
¿Cómo encuentras todas las dependencias de los proyectos?
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
}

Uso:

# 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.