2012-05-31 20 views
43

Quindi ho un piccolo programma che consiste di tre file, tutti appartenenti allo stesso pacchetto (main), ma quando faccio "go build main.go" la build non ha successo. Quando era solo un file (main.go), tutto andava bene. Ora che ho fatto qualche sforzo per separare il codice, sembra che il compilatore non sia in grado di trovare la roba che è stata presa da main.go e inserita in questi due altri file (che risiedono nella stessa directory di main.go) . Che si traduce in errori "di tipo non definito".Come compilare il programma Go composto da più file?

ho letto qualcosa su come impostare la variabile GOPATH, così ho provato

set GOPATH=%cd% 
go build main.go 

ma anche questo non ha funzionato.

Qualsiasi aiuto è apprezzato.

risposta

50

Supponendo che si sta scrivendo un programma chiamato myprog:

mettere tutti i vostri file in una directory come questo

myproject/go/src/myprog/xxx.go 

Quindi aggiungere myproject/go a GOPATH

Ed eseguire

go install myprog 

In questo modo sarete in grado di aggiungere altro pacchetto s e programmi in myproject/go/src se vuoi.

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

(questo documento è sempre mancato da nuovi arrivati, e spesso mal capito in un primo momento deve ricevere la massima attenzione del team Go IMO.)

+0

In effetti, un capitolo molto utile che ho trascurato. Grazie! – Vitaly

+1

perché non sbarazzarsi di/go/e basta fare myproject/src? –

+0

suppongo anche che "go install myprog" scriva la fonte del progetto nella posizione $ GOPATH in qualche modo? È giusto? se è così, sarebbe bello avere quella spiegazione come parte della risposta pure –

45

Quando si separare il codice dalla main.go per esempio more.go, è sufficiente passare il file a go build/go run/go install.

Quindi, se è già stato eseguito

go build main.go 

ora semplicemente

go build main.go more.go 

che altre informazioni:

go build --help 

stati:

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

noti che go build e go install differiscono da go run che il primo dei due stati aspettarsi nomi pacchetti come argomenti, mentre il secondo si aspetta vanno file. Tuttavia, i primi due accetteranno anche i file go come fa go install.

Se vi state chiedendo: costruire sarà solo build i pacchetti/file, install produrrà oggetti e file binari nel vostro GOPATH e run verrà compilare ed eseguire il programma.

+3

Se non si desidera continuare ad aggiungere altri file, utilizzare regex con: go run * .go – NateW

+0

ok grazie, va sempre scrivere solo un file eseguibile? Non mantiene separati i file eseguibili (come in Java)? –

+1

go build * .go, funziona? non ha fatto per me –

18

Si potrebbe anche solo correre

go build 

nel progetto cartella myproject/go/src/myprog

Poi si può solo digitare

./myprog 

per eseguire la vostra applicazione

+2

l'output è un oggetto go, non un eseguibile. – user2284570

Problemi correlati