Как скомпилировать программу Go, состоящую из нескольких файлов?

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

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

set GOPATH=%cd%
go build main.go

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

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

Ответ 1

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

Поместите все ваши файлы в каталог, подобный этому

myproject/go/src/myprog/xxx.go

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

И запустите

go install myprog

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

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

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

Ответ 2

Когда вы отделяете код от 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, поскольку go install does.

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

Ответ 3

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

go build

в папке проекта myproject/go/src/myprog

Затем вы можете просто ввести

./myprog

для запуска вашего приложения

Ответ 4

Это зависит от структуры вашего проекта. Но самое простое это:

go build ./... -o ./myproject

затем запустите ./myproject.

Предположим, что структура вашего проекта выглядит следующим образом

- hello
|- main.go

тогда вы просто идете в каталог проекта и запускаете

go build -o ./myproject

затем запустите ./myproject на оболочке.

или же

# most easiest; builds and run simultaneously
go run main.go

Предположим, ваш основной файл вложен в подкаталог, например, cmd

- hello
|- cmd
 |- main.go

тогда ты побежишь

go run cmd/main.go

Ответ 5

Ты можешь использовать

go build *.go 
go run *.go

оба будут работать и вы можете использовать

go build .
go run .

Ответ 6

Ага! Это очень прямолинейно и именно там, где в игру вступает пакетная стратегия. Есть три способа, насколько я знаю. структура папок:

GOPATH/src/github.com/abc/myproject/adapter/main.go pkg1 Предупреждение pkg2: адаптер может содержать только основной пакет и каталоги sun

  1. перейдите в папку "Адаптер". Запустите go build main.go

  2. перейдите в папку "Адаптер". Запустите go build main.go

  3. перейдите к GOPATH/src и узнайте относительный путь к основному пакету, здесь "myproject/adapter". Выполните go build myproject/adapter

EXE файл будет создан в каталоге, в котором вы находитесь в данный момент.