¿Cómo puedo "ejecutar" un proyecto con varios archivos en el paquete principal?
Tengo un único archivo en el main
paquete llamado main.go
. Como el código no es reutilizable, quiero separar parte del código en un archivo diferente pero en el mismo paquete.
¿Cómo divido el contenido main.go
en varios archivos sin crear un paquete separado?
Quiero una estructura de directorio como esta:
ls foo
# output:
main.go
bar.go
Archivobar.go
// file bar.go
package main
import "fmt"
func Bar() {
fmt.Println("Bar")
}
Archivomain.go
// file main.go
package main
func main() {
Bar()
}
En main.go
quiero usar func Bar()
desde bar.go
. Pero cuando lo ejecuto go run main.go
resulta en:
# command-line-arguments
./main.go:4:2: undefined: Bar
¿Qué se puede hacer para ejecutar el código sin error?
Actualización 26 de julio de 2019 (para ir >=1.11)
go run .
También funcionará en Windows.
Respuesta original (para entornos que no son Windows)
El código realmente funciona. El problema era que en lugar de ejecutar go run main.go
debería ejecutar:
go run *.go
Actualización de agosto de 2018, con Go 1.11 , una sección "Ejecutar" dice:
El
go run
comando ahora permite una única ruta de importación, un nombre de directorio o un patrón que coincida con un único paquete.
Esto permitego run pkg
ogo run dir
, lo más importantego run .
Respuesta original de enero de 2015.
Como se menciona en "¿ Cómo compilar un programa Go que consta de varios archivos? ", go run
espera una lista de archivos, ya que "compila y ejecuta el main
paquete que comprende los archivos fuente de Go nombrados".
Así que ciertamente puedes dividir tu main
paquete en varios archivos con go run
.
Eso difiere de go build/go install
lo que se esperan nombres de paquetes (y no nombres de archivos).
Un simple go build
produciría un ejecutable con el nombre de la carpeta principal.
Tenga en cuenta que, como se ilustra en este hilo , a go run *.go
no funcionaría en una sesión CMD de Windows, ya que el shell no realiza expansión con comodines .
En mi opinión, la mejor respuesta a esta pregunta está oculta en los comentarios de la respuesta principal.
Simplemente ejecuta esto:
go run .
Esto ejecutará todos los archivos en el paquete principal, pero no mostrará un mensaje de error como
go run: cannot run *_test.go files (main_test.go)
Felicitaciones a @BarthesSimpson