run library golang create code go undefined func

library - ¿Función "indefinida" de golang declarada en otro archivo?



import golang (7)

Estoy tratando de escribir un programa básico que llame a una función en un archivo diferente, pero que sea parte del mismo paquete. Sin embargo, devuelve:

undefined: NewEmployee

Aquí está el código fuente:

main.go :

package main func main() { emp := NewEmployee() }

employee.go :

package main type Employee struct { name string age int } func NewEmployee() *Employee { p := &Employee{} return p } func PrintEmployee (p *Employee) { return "Hello world!" }


Acabo de tener el mismo problema en GoLand (que es Intellij IDEA for Go) y encontré una solución. Debe cambiar el Run kind de File a Package o Directory . Puede elegir esto desde un menú desplegable si entra en Run/Edit configuraciones.

Por ejemplo: para el paquete ~/go/src/a_package , use una Package path de Package path de a_package y un Directory de ~/go/src/a_package y Run kind de Package o Directory .


Lea golang.org/doc/code.html .

No use /src en su GOPATH . Los paquetes se encuentran en $GOPATH/src .

Para build o install necesita tener sus archivos en un directorio de paquetes.

Para go run , debe proporcionar todos los archivos como argumento:

go run main.go employee.go

Pero, casi siempre debe usar go install , o go build (y preferiblemente el primero, ya que go build causa confusión al trabajar con paquetes no principales)


Me encontré con el mismo problema con Go11 , solo quería compartir cómo lo Go11 para ayudar a otros en caso de que se Go11 con el mismo problema.

Tenía mi proyecto Go fuera de $GOPATH , así que tuve que encender GO111MODULE=on sin esta opción activada, le dará este problema; incluso si intenta compilar o probar todo el package o directory , no se resolverá sin GO111MODULE=on


Puedes probar uno de los siguientes.

Método 01 : suponga que el nombre de su proyecto es MyProject

  • vaya a su camino, escriba go build y presione enter.
  • creará un archivo ejecutable como el nombre de su proyecto ("MyProject")
  • luego en su terminal escriba ./MyProject y ./MyProject enter

puede realizar ambos pasos a la vez escribiendo go build && ./MyProject . ejecutará su proyecto correctamente con todos los archivos go .

Método 02

simplemente escriba go run *.go y go run *.go enter. esto ejecutará todos sus go files .

Espero que esto ayude a alguien.


Si desea llamar a una función desde otro archivo go y está utilizando Goland, busque la opción ''Editar configuración'' en el menú Ejecutar y cambie el tipo de ejecución de Archivo a Directorio. Borra todos los errores y le permite llamar a funciones desde otros archivos go.


Si está utilizando go run , go run *.go . Buscará automáticamente todos los archivos go en el directorio de trabajo actual, compilará y luego ejecutará su función principal.


Si su carpeta de origen está estructurada / go / src / blog (suponiendo que el nombre de su carpeta de origen es blog).

  1. cd / go / src / blog ... (cd dentro de la carpeta que tiene su paquete)
  2. ve a instalar
  3. Blog

Eso debería ejecutar todos sus archivos al mismo tiempo, en lugar de tener que enumerar los archivos manualmente o "golpear" un método en la línea de comandos.