Tengo dificultades para importar un archivo go local a otro archivo go.
La estructura de mi proyecto es como algo a continuación
-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin
Estoy intentando 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). Recibo 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? ¿Serían entonces un problema las importaciones locales? ¿Cuál es la mejor práctica en este caso? ¿Es tener solo un archivo go en el módulo (con las pruebas asociadas)?
package a
declaración en la parte superior.)package foo
) Y todavía no necesitan importarse directamente entre sí. Esta respuesta cubre esto un poco más para los módulos Go, incluido cómo importar paquetes en el mismo módulo en los módulos Go.Respuestas:
Cualquier número de archivos en un directorio es un solo paquete; los símbolos declarados en un archivo están disponibles para los demás sin ningún
import
s ni calificadores. Todos los archivos necesitan la mismapackage foo
declaración en la parte superior (o obtendrá un errorgo build
).Usted tiene que
GOPATH
establecerse en el directorio donde suspkg
,src
ybin
directorios residen. Esto 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 de Github sería
github.com/username/reponame
(no sologithub.com/xxxx
). Entonces, si desea tenermain
y otro paquete, puede terminar haciendo algoworkspace/src
comogithub.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/...
ruta completa : no se permiten importaciones relativas en un espacio de trabajo. Si se cansa de escribir rutas, usegoimports
. Si se las arreglabago run
, es hora de cambiar ago build
:run
trata mal con varios archivosmain
y no me molesté en probar, pero escuché (de Dave Cheney aquí )go run
que no reconstruye las dependencias sucias.Parece que al menos ha intentado configurar GOPATH en lo correcto, por lo que si aún está atascado, tal vez incluya exactamente cómo configuró la variable de entorno (el comando, etc.) y qué comando ejecutó 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án los consejos del equipo de Go sobre la configuración del espacio de trabajo . Quizás ninguno de los dos ayude, pero eche un vistazo y al menos señale qué parte lo confunde si está confundido.
fuente
package main
declaración a todos los archivos en el mismo directorio, pero tengo elundefined
error,main.go
no puedo ver las funciones del archivocontrollers.go
que está en el mismo directorio.go run
, es posible que deba pasarle explícitamente ambos nombres de archivo, o cambiar a ponerlos en un paquete en su GOPATH y luego agregarlogo build
. También verifique dos veces los errores comunes no relacionados con la estructura del paquete (como un nombre escrito). Si nada de eso lo resuelve, abriría una nueva pregunta con todos los detalles que pueda; Puede que sea necesario discutir mucho sobre cómo se resuelven su directorio, archivos, etc., y dado que se trataría específicamente de su configuración, una nueva pregunta parece ser el mejor lugar para eso.No es necesaria ninguna importación siempre que declare ambos
a.go
yb.go
que estén en el mismo paquete. Luego, puede utilizargo run
para reconocer varios archivos con:$ go run a.go b.go
fuente
en este caso:
main.go import "./a"
Puede llamar a la función en a.go y b.go, que tiene las primeras letras en mayúsculas.
fuente
Solo quería algo realmente básico para sacar algunos archivos de la carpeta principal, como la respuesta del usuario2889485, pero su respuesta específica no funcionó para mí. No me importaba si estaban en el mismo paquete o no.
Mi espacio de trabajo GOPATH es
c:\work\go
y debajo tengo/src/pg/main.go (package main) /src/pg/dbtypes.go (pakage dbtypes)
en
main.go
yoimport "/pg/dbtypes"
fuente