golang - instalar go en windows
Golang: ejecuta todos los archivos.go dentro del directorio actual a través de la línea de comando(paquete de archivos múltiples) (9)
Soy un recién llegado a Go. Me gusta mucho el lenguaje, pero rápidamente me di cuenta de que necesitaba comenzar a dividir mis archivos debido a un aumento en el tamaño del programa.
go run main.go
(con main.go siendo el archivo con mi función main ())
no funcionó y llegué a una barrera por un tiempo, porque no tenía idea de cómo hacer funcionar mi programa.
Algunas búsquedas rápidas me llevan a la respuesta de
go run main.go other.go ..
donde al escribir todos los archivos en los que está compuesto mi package main
, podría ejecutar la programación. Sin embargo, esto es completamente engorroso y frustrante de hacer cada vez.
Escribo la siguiente pregunta autoevaluada para evitar que otras personas como yo toquemos esta barrera.
Aquí está mi solución:
go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)
Lo uso con un alias para facilitar la ejecución de aplicaciones de línea de comandos
alias gorun=''go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)''
$ gorun param1 param2
Como señala Nate Finch :
Go run is ... en realidad solo está destinado a ser utilizado en programas muy pequeños, que generalmente solo necesitan un solo archivo.
Incluso en Unix, go run *.go
menudo no es correcto. En cualquier proyecto con pruebas unitarias (y cada proyecto debe tener pruebas unitarias), esto dará el error:
go run: cannot run *_test.go files (something_test.go)
También ignorará las restricciones de compilación, por _windows.go
archivos _windows.go
se compilarán (o intentarán compilarse) en Unix, que no es lo que usted desea.
Se ha debatido un poco acerca de cómo hacer go run
el resto del comando go
, y hay una CL abierta para él ( 5164 ). Actualmente está en consideración para Go 1.4. Mientras tanto, la solución recomendada en todas las plataformas es:
go build && ./<executable>
En Windows, generalmente solo agrego un poco de test.bat a todos mis directorios de proyectos:
go build
./{project_name}.exe
go clean
Funciona lo suficientemente bien. Reemplace {project_name} con el nombre de su ejecutable, por supuesto. Y una vez que el ejecutable finaliza, el script por lotes pasa a la limpieza.
La mejor manera de hacerlo es ejecutarlo así:
go run !(*_test).go
Se salta todos los archivos de prueba, que es exactamente lo que necesita para evitar el error.
La otra sugerencia:
go build && ./<executable>
es un poco molesto Tienes que eliminar el ejecutable todo el tiempo para evitar ser marcado por git. Puedes ponerlo en gitignore, por supuesto, pero soy flojo y esto es un paso extra.
Para las personas que intentan usar go run
combinadas con go generate
una solución puede ser:
//go:generate sh -c "go run path/*.go"
Puede ejecutar todos los archivos .go
, sin incluir las pruebas, utilizando esta construcción bash:
go run $(ls -1 *.go | grep -v _test.go)
Si entiendo bien tu pregunta, necesitas importar otro código como bibliotecas.
Pequeño ejemplo
./testing/main.go:
package main
import "fmt"
import L "testing/lib"
func main() {
fmt.Println("Hello from main()")
L.Somefunc()
}
./testing/lib/somelib.go:
package lib
import "fmt"
func Somefunc() {
fmt.Println("Hello from Somefunc()")
return
}
Para iniciar, go run main.go
solo usa esto
go run *.go
funcionará suponiendo que no tiene ningún archivo de prueba
Sistemas relacionados con Unix
go run *.go
será suficiente en la mayoría de los casos.
Continúe con el método siguiente si esto causa errores.
Los sistemas Windows (y en otros casos donde go run *.go
no funciona)
La expansión del token no funciona en la línea de comandos de Windows y, por lo tanto, lo anterior no funcionará y mostrará un error. go run *.go
también puede no funcionar en los sistemas operativos en algunos casos debido a las limitaciones actuales del compilador.
En estos casos, use
go build && foo.exe
donde foo.exe
es el nombre del archivo .exe producido. Si tal vez no tienes idea de cuál es el nombre del ejecutable, primero
go build
y verificar el nombre del archivo .exe producido. Después, use el método que incluye el nombre del archivo.
Estos 2 métodos construirán y ejecutarán todos los archivos .go dentro de su directorio actual con el mínimo esfuerzo.