Как скомпилировать программу 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
-
перейдите в папку "Адаптер". Запустите go build main.go
-
перейдите в папку "Адаптер". Запустите go build main.go
-
перейдите к GOPATH/src и узнайте относительный путь к основному пакету, здесь "myproject/adapter". Выполните go build myproject/adapter
EXE файл будет создан в каталоге, в котором вы находитесь в данный момент.