2012-05-31 3 views
43

Итак, у меня есть небольшая программа, состоящая из трех файлов, все из которых принадлежат к одному и тому же пакету (main), но когда я делаю «go build main.go», сборка не удалась. Когда это был только один файл (main.go), все работало нормально. Теперь, когда я приложил некоторые усилия для разделения кода, похоже, что компилятор не может найти материал, который был вынут из main.go, и поместить в эти два других файла (которые находятся в том же каталоге, что и main.go) , Это приводит к ошибкам типа «неопределенного типа».Как скомпилировать программу Go, состоящую из нескольких файлов?

Я прочитал кое-что о настройке переменной GOPATH, поэтому я попытался

set GOPATH=%cd% 
go build main.go 

но это тоже не сработало.

Любая помощь приветствуется.

ответ

50

Предположим, вы пишете программу под названием MyProg:

Поместите все файлы в каталоге, как этот

myproject/go/src/myprog/xxx.go 

Затем добавьте myproject/go к GOPATH

И запустить

go install myprog 

Таким образом, вы сможете добавить другой пакет s и программы в myproject/go/src, если хотите.

Ссылка: http://golang.org/doc/code.html

(этот документ всегда скучал новички, и часто плохо понимают в первую Он должен получить наибольшее внимание команды Go ИМО.)

+0

Действительно, очень полезная глава, которую я забыл. Благодаря! – Vitaly

+1

Почему бы не избавиться от/go/и просто сделать myproject/src? –

+0

также, я предполагаю, что «go install myprog» как-то записывает источник проекта в местоположение $ GOPATH? Это правильно? если это так, было бы неплохо иметь такое объяснение как часть ответа, а также –

45

Когда вы отделяете код от main.go например, more.go, вы просто передаете этот файл go build/go run/go install.

Так что, если вы ранее побежали

go build main.go 

вы теперь просто

go build main.go more.go 

В дальнейшей информации:

go build --help 

состояние:

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

Обратите внимание, что go build и go install отличаются от go run в том, что первые два государства ожидать именапакета в качестве аргументов, в то время как последний ожидает идут файлы. Тем не менее, первые два будут также принимать файлы go, как go install.

Если вы задаетесь вопросом: сборка будет только build в пакеты/файлы, install будет производить объект и бинарные файлы в GOPATH и run будет скомпилировать и запустить программу.

+3

Если вы не хотите добавлять все больше и больше файлов, используйте regex, с помощью: go run * .go – NateW

+0

ok Спасибо, всегда всегда записывает только один исполняемый файл? Он не поддерживает разделение исполняемых файлов (например, на Java)? –

+1

go сбор * .go, это работа? не для меня –

18

Вы также можете просто запустить

go build 

в вашем проекте папку MyProject/Go/SRC/MyProg

Тогда вы можете просто ввести

./myprog 

запустить приложение

+2

Результат - объект go, а не исполняемый файл. – user2284570

Смежные вопросы