2015-01-22 5 views
69

В настоящее время у меня есть один файл в моем основном пакете под названием main.go. Как разбить содержимое main.go на несколько файлов, не создавая отдельный пакет, потому что код не может использоваться повторно.Golang несколько файлов в основном пакете

Я хочу, чтобы структура каталогов, как это:

$ ls foo 

main.go 
bar.go 

bar.go

package main 

import "fmt" 

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

Тогда в main.go

package main 

func main() { 
    Bar() 
} 

ответ

109

Код выше на самом деле работает. Проблема заключалась в том что мне нужно, чтобы запустить

go run *.go 

вместо

go run main.go 
+2

Если у вас нет '* _test.go' в вашей папке. Тогда вам нужно (1) 'shopt -s ext glob' и (2)' go run! (* _ Test) .go'. – getWeberForStackExchange

+0

и как насчет тех, кто использует appengine? – goodies4uall

47

Как уже упоминалось в «How to compile Go program consisting of multiple files?», go run ожидает список файлов, так как он «компилирует и запускает main пакет, включающий названный Go исходные файлы ".
Таким образом, вы, безусловно, можете разделить свой пакет main в нескольких файлах с помощью go run.

Это отличается от go build/go install, которые ожидают названия пакетов (и не идут имена файлов).
Простой go build создаст исполняемый файл, названный в честь родительской папки.

Обратите внимание, что illustrated by this thread, a go run *.go не будет работать в сеансе CMD Windows, так как shell doesn't do wildcard expansion.

+0

Есть ли обходной путь для запуска нескольких файлов go с 'run' с помощью командной строки Windows? – Luke

+0

@ Luke Есть несколько: http://superuser.com/q/460598/141 – VonC

0

Для Windows установите Cygwin и используйте его вместо командной строки. «go run * .go» будет работать тогда.