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.goyemployee.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#PackageNamesgoherramienta.Respuestas:
Lea "Cómo escribir el código Go" .
No lo uses
/srcen tuGOPATH. Los paquetes se encuentran en$GOPATH/src.Para
buildoinstallnecesita 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 buildcausa confusión al trabajar con paquetes no principales)fuente
$ go run *.goserí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 kinddeFileaPackageoDirectory. Puede elegir esto en un menú desplegable si accede aRun/EditConfiguraciones.Por ejemplo: para el paquete
~/go/src/a_package, use unPackage pathdea_packagey unDirectoryde~/go/src/a_packageyRun kinddePackageoDirectory.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
MyProjectgo buildy presione enter../MyProjecty presione enterPuede hacer ambos pasos a la vez escribiendo
go build && ./MyProject. ejecutará su proyecto correctamente con todos losgoarchivos.Método 02
solo escribe
go run *.goy 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=onsin esta opción activada, esto le dará este problema; incluso si intentas construir o probar todopackageodirectoryno se resolverá sinGO111MODULE=onfuente
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 delmainpaquete.Otra opción es construir el binario con
go buildy ejecutarlo.fuente
¡Solo use el comando
go run *.gopara ejecutar todos los archivos go en su paquete!fuente