Estoy tratando de crear y usar un paquete personalizado en Go. Probablemente sea algo muy obvio, pero no puedo encontrar mucha información sobre esto. Básicamente, tengo estos dos archivos en la misma carpeta:
mylib.go
package mylib
type SomeType struct {
}
main.go
package main
import (
"mylib"
)
func main() {
}
Cuando lo intento go run main.go
, aparece este error:
main.go:4:2: import "mylib": cannot find package
He intentado ejecutar go build mylib.go
primero pero no parece estar haciendo nada (no se genera ningún archivo, no hay mensaje de error). ¿Alguna idea de cómo podría hacer esto?
go install
bajo el directorio demylib
primero e intente nuevamente.Respuestas:
Primero, asegúrese de leer y comprender el documento "Cómo escribir el código Go" .
La respuesta real depende de la naturaleza de su "paquete personalizado".
Si está destinado a ser de uso general, considere emplear el llamado "diseño de código Github" . Básicamente, usted hace que su biblioteca sea un
go get
proyecto de tabla separada .Si su biblioteca es para uso interno, podría ir así:
Demostrar:
Ahora, en el nivel superior
main.go
, podríaimport "myproject/mylib"
y funcionaría bien.fuente
mylib
en el código demyproject2
? Entonces la respuesta es "mediante el usoimport "myproject/mylib"
: la idea es que Go busca rutas importadas en cada directorio que extrae de laGOPATH
variable de entorno (se llaman" espacios de trabajo "), pero esta búsqueda no es (por suerte) recursiva, por lo que tales rutas son efectivamente "anclado" en sus respectivos espacios de trabajo.go mod
desarrollos recientes , un módulo podría ser la respuesta (y tambiéngo mod
admite la venta de módulos).Para este tipo de estructura de carpetas:
La forma más simple es usar esto:
fuente
foo/mylib
(suponiendo que la carpeta que contiene main.go esfoo
).go install
descanso. Si está creando un proyecto independiente que desea que la gente descargue y ejecutego build
, está bien; sin embargo, emplearía el "diseño de código de Github" mencionado anteriormente (incluso si está fuera de Bitbucket o similar) si deseago install
soporte completo .Para un proyecto alojado en GitHub, esto es lo que la gente suele hacer:
mylib.go
main.go
fuente
Soy un programador experimentado, pero bastante nuevo en Go World. Y confieso que me he enfrentado a pocas dificultades para entender Go ... Me enfrenté a este mismo problema al tratar de organizar mis archivos go en subcarpetas. La forma en que lo hice:
GO_Directory (el asignado a $ GOPATH)
En el archivo MyProject \ Entities \ Fiboo \ Client.go
en el archivo MyProject \ main.go
(Estoy ejecutando Go 1.9 en Ubuntu 16.04)
Y recuerden chicos, soy novato en Go. Si lo que estoy haciendo es una mala práctica, ¡hágamelo saber!
fuente
Otra solución:
agregar
src/myproject
a $ GOPATH.Luego
import "mylib"
compilará.fuente