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!"
}
package x
, también su paquete principal generalmente solo contiene un solo archivo, luego importa las otras piezas que necesitago run
? (y ver golang.org/doc/code.html )main.go
yemployee.go
. Porque se supone que todos los archivos go tienen una declaración de paquete, y no veo ninguno en el suyo. Ver: golang.org/doc/code.html#PackageNamesgo
herramienta.Respuestas:
Lea "Cómo escribir el código Go" .
No lo uses
/src
en tuGOPATH
. Los paquetes se encuentran en$GOPATH/src
.Para
build
oinstall
necesita tener sus archivos en un directorio de paquetes.Para
go run
, debe proporcionar todos los archivos como argumento:Pero, casi siempre debe usar
go install
, ogo build
(y preferiblemente el primero, ya quego build
causa confusión al trabajar con paquetes no principales)fuente
$ go run *.go
sería un acceso directo en lugar de ejecutar todos los archivosAcabo de tener el mismo problema en GoLand (que es Intellij IDEA for Go) y encontré una solución. Necesita cambiar el
Run kind
deFile
aPackage
oDirectory
. Puede elegir esto en un menú desplegable si accede aRun/Edit
Configuraciones.Por ejemplo: para el paquete
~/go/src/a_package
, use unPackage path
dea_package
y unDirectory
de~/go/src/a_package
yRun kind
dePackage
oDirectory
.fuente
Si estás usando
go run
, hazlogo run *.go
. Encontrará automáticamente todos los archivos go en el directorio de trabajo actual, compilará y luego ejecutará su función principal.fuente
go run !(*_test).go
- Golang: ejecuta todos los archivos .go dentro del directorio actual a través de la línea de comando (paquete de múltiples archivos)Puedes probar uno de los siguientes.
Método 01 : suponga que el nombre de su proyecto es
MyProject
go build
y presione enter../MyProject
y presione enterPuede hacer ambos pasos a la vez escribiendo
go build && ./MyProject
. ejecutará su proyecto correctamente con todos losgo
archivos.Método 02
solo escribe
go run *.go
y presiona enter. esto ejecutará todo tugo files
.Espero que esto ayude a alguien.
fuente
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.
fuente
Me encontré con el mismo problema con
Go11
, solo quería compartir cómo lo resolví para ayudar a otros en caso de que se encontraran con el mismo problema.Tenía mi proyecto Go afuera
$GOPATH
, así que tuve que activarloGO111MODULE=on
sin esta opción activada, esto le dará este problema; incluso si intentas construir o probar todopackage
odirectory
no se resolverá sinGO111MODULE=on
fuente
debe usar los módulos go ahora, si no está siguiendo Cómo escribir el código go
Con el módulo go no tiene que poner el código en $ GOPATH / src. También puede vivir en cualquier otro lugar.
Puede mover el código a un directorio diferente como / employee, para que funcione. En el directorio de empleados, inicialice el módulo go
fuente
Si su carpeta de origen está estructurada / go / src / blog (suponiendo que el nombre de su carpeta de origen es blog).
Eso debería ejecutar todos sus archivos al mismo tiempo, en lugar de tener que enumerar los archivos manualmente o "bashing" un método en la línea de comandos.
fuente
go run .
ejecutará todos sus archivos. El punto de entrada es la funciónmain()
que debe ser exclusiva delmain
paquete.Otra opción es construir el binario con
go build
y ejecutarlo.fuente
¡Solo use el comando
go run *.go
para ejecutar todos los archivos go en su paquete!fuente