2012-05-31 20 views
43

Así que tengo un pequeño programa que consta de tres archivos, todos ellos pertenecientes al mismo paquete (principal), pero cuando lo hago "vaya build main.go" la compilación no tiene éxito. Cuando era solo un archivo (main.go) todo funcionó bien. Ahora que me tomé un esfuerzo para separar el código, parece que el compilador no puede encontrar las cosas que fueron sacadas de main.go y ponerlas en estos otros dos archivos (que residen en el mismo directorio que main.go) . Lo que produce errores de tipo "indefinido".¿Cómo compilar el programa Go que consta de varios archivos?

leí algo sobre la configuración de la variable GOPATH, así que intentaron

set GOPATH=%cd% 
go build main.go 

pero eso también no funcionó.

Cualquier ayuda es apreciada.

Respuesta

50

Suponiendo que usted está escribiendo un programa llamado miprog:

poner todos sus archivos en un directorio como éste

myproject/go/src/myprog/xxx.go 

A continuación, añadir a myproject/go GOPATH

Y corre

go install myprog 

De esta manera, podrá agregar otro paquete s y programas en myproject/go/src si lo desea.

Referencia: http://golang.org/doc/code.html

(este documento siempre se perdió por los recién llegados, y a menudo se entiende mal en un principio debería recibir la mayor atención del equipo de Go OMI.)

+0

De hecho, un capítulo muy útil que pasé por alto. ¡Gracias! – Vitaly

+1

¿por qué no deshacerse de/go/y simplemente hacer myproject/src? –

+0

también, supongo que "ir a instalar myprog" escribe el origen del proyecto en la ubicación $ GOPATH de alguna manera? ¿Está bien? de ser así, sería bueno tener esa explicación como parte de la respuesta. –

45

Cuando se separan código de main.go en por ejemplo more.go, simplemente pase ese archivo a go build/go run/go install también.

Así que si previamente se ejecutó

go build main.go 

que ahora simplemente

go build main.go more.go 

Como más información:

go build --help 

estados:

If the arguments are a list of .go files, build treats them as a list 
of source files specifying a single package. 

en cuenta que go build y go install difieren de go run en que los dos primeros nombres estado esperar paquete como argumentos, mientras que el segundo Espera van archivos. Sin embargo, los dos primeros también aceptarán archivos go a medida que Go install lo haga.

Si se preguntan: construimos es sólo build los paquetes/archivos, install producirá archivos binarios objeto y en su GOPATH y run se compilar y ejecutar su programa.

+3

Si no quiere seguir agregando más y más archivos, use regex, con: ejecute * .go – NateW

+0

ok gracias, ¿Go siempre escribe solo un archivo ejecutable? No mantiene separados los archivos ejecutables (como en Java)? –

+1

ir a compilar * .go, ¿eso funciona? no para mí –

18

También puedes, simplemente correr

go build 

en su proyecto miproyecto carpeta/go/src/miprog

continuación, sólo puede escribir

./myprog 

para ejecutar su aplicación

+2

la salida es un objeto go, no un ejecutable. – user2284570

Cuestiones relacionadas