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
PackageName
forman 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 comandogo
buscasrc/pkg/widget
dentro de la raíz de Go, y luego, si el origen del paquete no se encuentra allí, buscasrc/widget
dentro 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
GOPATH
enumera 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:/Go
en Windows), pero es posible instalarlas en una ubicación diferente.
Si hace esto, necesitará establecer la variable de entornoGOROOT
en 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
$GOPATH
en un directorio válido, por ejemplo,export GOPATH="$HOME/go"
- Mueva
foobar.go
a$GOPATH/src/foobar/foobar.go
y la construcción debería funcionar bien.
Pasos recomendados adicionales:
- Agregue
$GOPATH/bin
a su$PATH
de:PATH="$GOPATH/bin:$PATH"
- Mueva
main.go
a una subcarpeta de$GOPATH/src
, por ejemplo$GOPATH/src/test
-
go install test
ahora debería crear un ejecutable en$GOPATH/bin
que se pueda$GOPATH/bin
al escribirtest
en 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ó.