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).
- cd / go / src / blog ... (cd dentro de la carpeta que tiene su paquete)
- ve a instalar
- 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.