world hello gopath golang import path go

import - hello - gopath windows



importar ir archivos en la misma carpeta (3)

Tengo dificultades para importar un archivo go local en otro archivo go.

Mi estructura de proyecto es como algo a continuación

-samplego --pkg --src ---github.com ----xxxx -----a.go -----b.go --bin

Estoy tratando de importar a.go dentro de b.go. Intenté lo siguiente,

import "a" import "github.com/xxxx/a"

Ninguno de estos funcionó ... Entiendo que tengo que entrometerme con GOPATH, pero no pude hacerlo bien. Actualmente mi GOPATH apunta a samplego (/ workspace / samplego). Obtengo el siguiente error

cannot find package "a" in any of: /usr/local/go/src/pkg/a (from $GOROOT) /workspace/samplego/src/a (from $GOPATH)

Además, ¿cómo funciona GOPATH cuando estos archivos fuente se importan a otro proyecto / módulo? ¿Las importaciones locales serían un problema entonces? ¿Cuál es la mejor práctica en este caso? ¿Es tener solo un archivo go en el módulo (con pruebas asociadas)?


./main.go (en el paquete principal)
./a/a.go (en el paquete a)
./a/b.go (en el paquete a)

en este caso:
main.go import "./a"

Puede invocar la función en a.go y b.go, que con mayúsculas en la primera letra.


Cualquier número de archivos en un directorio es un paquete único; los símbolos declarados en un archivo están disponibles para los demás sin import s o calificadores. Todos los archivos necesitan el mismo package foo declaración en la parte superior (o obtendrás un error de go build ).

Necesitas que GOPATH establezca en el directorio donde residen tus directorios pkg , src y bin . Esta es solo una cuestión de preferencia, pero es común tener un solo espacio de trabajo para todas sus aplicaciones (a veces $HOME ), no una por aplicación.

Normalmente, una ruta Github sería github.com/username/reponame (no solo github.com/xxxx ). Entonces, si desea tener main y otro paquete, puede terminar haciendo algo en workspace/src como

github.com/ username/ reponame/ main.go // package main, importing "github.com/username/reponame/b" b/ b.go // package b

Tenga en cuenta que siempre importa con la github.com/... completa github.com/... : las importaciones relativas no están permitidas en un espacio de trabajo. Si te cansas de escribir rutas, utiliza goimports . Si te las arreglaras con go run , es hora de cambiar a go build : run trata mal con mains de múltiples archivos y no me molesté en probar pero escuché (de Dave Cheney here ) go run no reconstruye dependencias sucias .

Parece que al menos has intentado establecer GOPATH en la posición correcta, por lo que si aún estás atascado, tal vez incluyas exactamente cómo estableces la variable de entorno (el comando, etc.) y qué comando ejecutaste y qué error sucedió. Aquí hay instrucciones sobre cómo configurarlo (y hacer que la configuración sea persistente) en Linux / UNIX y aquí está el consejo del equipo Go sobre la configuración del espacio de trabajo . Tal vez ninguno ayuda, pero eche un vistazo y al menos apunte a qué parte lo confunde si está confundido.


No es necesario importar, siempre y cuando declare que a.go y b.go están en el mismo paquete. Luego, puede usar go run para reconocer múltiples archivos con:

$ go run a.go b.go