golang - Go build: "No se puede encontrar el paquete"(aunque GOPATH esté configurado)
golang project structure (4)
¿Has intentado agregar el directorio absoluto de ir a tu ''ruta''?
export PATH=$PATH:/directory/to/go/
Aunque tengo GOPATH configurado correctamente, todavía no puedo obtener "ir a compilar" o "ejecutar" para encontrar mis propios paquetes. ¿Qué estoy haciendo mal? Muchas gracias!
$ echo $GOROOT
/usr/local/go
$ echo $GOPATH
/home/mitchell/go
$ cat ~/main.go
package main
import "foobar"
func main() { }
$ cat /home/mitchell/go/src/foobar.go
package foobar
$ go build main.go
main.go:3:8: import "foobar": cannot find package
Editar: como querías decir GOPATH, mira la answer fasmat (votada)
Como se menciona en " ¿Cómo hago para buscar mi paquete? ", Debe colocar un paquete xxx en un directorio xxx .
Ver la especificación de idioma Go :
package math
Un conjunto de archivos que comparten el mismo
PackageNameforman la implementación de un paquete.
Una implementación puede requerir que todos los archivos fuente de un paquete habitan en el mismo directorio.
La organización del Código menciona:
Al crear un programa que importe el paquete "
widget", el comandogobuscasrc/pkg/widgetdentro de la raíz de Go, y luego, si el origen del paquete no se encuentra allí, buscasrc/widgetdentro de cada espacio de trabajo en orden .
(un "espacio de trabajo" es una entrada de ruta en su GOPATH : esa variable puede hacer referencia a múltiples rutas para que su '' src, bin, pkg '' sea)
(Respuesta original)
También debe establecer GOPATH en ~ / go, no en GOROOT , como se ilustra en " Cómo escribir el código Go ".
La ruta de acceso se usa para resolver las declaraciones de importación. Es implementado y documentado en el paquete go / build.
La variable de entorno
GOPATHenumera lugares para buscar el código Go.
En Unix, el valor es una cadena separada por dos puntos.
En Windows, el valor es una cadena separada por punto y coma.
En el Plan 9, el valor es una lista.
Eso es diferente de GOROOT :
Las distribuciones binarias de Go suponen que se instalarán en
/usr/local/go(oc:/Goen Windows), pero es posible instalarlas en una ubicación diferente.
Si hace esto, necesitará establecer la variable de entornoGOROOTen ese directorio cuando use las herramientas Ir.
No funciona porque tu archivo fuente de foobar.go no está en un directorio llamado foobar . go build e go install intente hacer coincidir directorios, no archivos fuente.
- Establezca
$GOPATHen un directorio válido, por ejemplo,export GOPATH="$HOME/go" - Mueva
foobar.goa$GOPATH/src/foobar/foobar.goy la construcción debería funcionar bien.
Pasos recomendados adicionales:
- Agregue
$GOPATH/bina su$PATHde:PATH="$GOPATH/bin:$PATH" - Mueva
main.goa una subcarpeta de$GOPATH/src, por ejemplo$GOPATH/src/test -
go install testahora debería crear un ejecutable en$GOPATH/binque se pueda$GOPATH/binal escribirtesten su terminal.
TL; DR: ¡ Sigue las convenciones de Go! (lección aprendida de la manera más difícil), verifique versiones anteriores de go y remove . Instale lo último
Para mí, la solución fue diferente. Trabajé en un servidor Linux compartido y después de verificar mi GOPATH y otras variables de entorno varias veces, todavía no funcionaba. Me encontré con varios errores, entre ellos ''No se puede encontrar el paquete'' y ''Ruta de importación no reconocida''. Después de intentar reinstalar con this solución siguiendo las instrucciones en golang.org (incluida la parte de remove ), aún se encontraron problemas.
Me tomó algo de tiempo darme cuenta de que todavía hay una versión anterior que no se ha desinstalado (corriendo la go version , which go luego vuelve ... DAHH), lo que me llevó a this pregunta y finalmente me resolvió.