Pregunta Go build: "No se puede encontrar el paquete" (aunque GOPATH esté configurado)


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

76
2017-11-03 22:15


origen


Respuestas:


No funciona porque tu foobar.go el archivo fuente no está en un directorio llamado foobar. go build y go install intente hacer coincidir directorios, no archivos fuente.

  1. Conjunto $GOPATH a un directorio válido, p. export GOPATH="$HOME/go"
  2. Movimiento foobar.go a $GOPATH/src/foobar/foobar.go y la construcción debería funcionar bien.

Pasos recomendados adicionales:

  1. Añadir $GOPATH/bin para usted $PATH por: PATH="$GOPATH/bin:$PATH"
  2. Movimiento main.go a una subcarpeta de $GOPATH/src, p.ej. $GOPATH/src/test
  3. go install test ahora debería crear un ejecutable en $GOPATH/bin eso se puede llamar escribiendo test en tu terminal.

101
2017-11-04 22:26



Editar: como querías decir GOPATH, mira fasmates responder (votado)

Como se menciona en "¿Cómo hago para ir a buscar mi paquete?", necesitas poner un paquete xxx en un directorio xxx.

Ver el Ir especificación de idioma:

package math

Un conjunto de archivos que comparten el mismo PackageName formar la implementación de un paquete.
  Una implementación puede requerir que todos los archivos fuente de un paquete habitan en el mismo directorio.

los Organización del código menciona:

Al construir un programa que importa el paquete "widget" el go comando busca src/pkg/widget dentro de la raíz de Go, y luego, si el origen del paquete no se encuentra allí, busca src/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 varias rutas para su 'src, bin, pkg' ser)


(Respuesta original)

También debes establecer GOPATH para ~ / ir, no GOROOTcomo se ilustra en "Cómo escribir Go Code".

La ruta de acceso se usa para resolver las declaraciones de importación. Es implementado y documentado en el paquete go / build.

los GOPATH la variable de entorno enumera los 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 (o c:\Go en Windows), pero es posible instalarlos en una ubicación diferente.
  Si haces esto, deberás configurar el GOROOT variable de entorno a ese directorio cuando se usan las herramientas Ir.


7
2017-11-03 22:30



TL; DR: ¡Sigue las convenciones de Go! (Lección aprendida de la manera más difícil), verifique versiones antiguas y retirar ellos. 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 esta solución por las instrucciones sobre golang.org (incluyendo el desinstalar parte) todavía encontró problemas.

Me tomó un tiempo darme cuenta de que todavía hay una versión anterior que no se ha desinstalado (ejecutándose go version entonces which go de nuevo ... DAHH) que me llevó a esta pregunta y finalmente resuelto.


2
2018-01-31 07:43



¿Has intentado agregar el directorio absoluto de ir a su "camino"?

export PATH=$PATH:/directory/to/go/

-2
2017-11-04 08:53