2015-01-22 19 views
69

Attualmente ho un singolo file nel mio pacchetto principale chiamato main.go. Come posso dividere il contenuto di main.go in più file senza creare un pacchetto separato perché il codice non è riutilizzabile.Golang più file nel pacchetto principale

Voglio una struttura di directory simile a questo:

$ ls foo 

main.go 
bar.go 

bar.go

package main 

import "fmt" 

func Bar() { 
    fmt.Println("Bar") 
} 

Poi nel main.go

package main 

func main() { 
    Bar() 
} 

risposta

109

Il codice di cui sopra funziona realmente. Il problema era che dovevo correre

go run *.go 

invece di

go run main.go 
+2

A meno che non ci sia '* _test.go' nella cartella. Quindi è necessario (1) 'shopt -s ext glob' e (2)' go run! (* _ Test) .go'. – getWeberForStackExchange

+0

e che dire di coloro che usano Appengine? – goodies4uall

47

Come accennato in "How to compile Go program consisting of multiple files?", go run aspetta un elenco di file, dal momento che si "compila ed esegue il pacchetto di main che comprende il nome Go file sorgenti".
Quindi è possibile dividere il pacchetto main in diversi file con go run.

Che differisce da go build/go install che si aspettano i nomi dei pacchetti (e non i nomi di file).
Un semplice go build produce un file eseguibile denominato dopo la cartella principale.

Si noti che, come illustrated by this thread, un go run *.go non funzionava in una sessione CMD Windows, dal shell doesn't do wildcard expansion.

+0

Esiste una soluzione alternativa per l'esecuzione di più file go con 'run' utilizzando il prompt dei comandi di Windows? – Luke

+0

@Luke Ce ne sono alcuni: http://superuser.com/q/460598/141 – VonC

0

Per Windows, installare Cygwin e utilizzarlo al posto del prompt dei comandi. "go run * .go" funzionerà allora.

Problemi correlati