Ошибка построения проекта Go с / cmd структурой (несколько точек входа) - PullRequest
0 голосов
/ 08 июня 2019

Вот структура каталогов моего проекта (~/go/src/bitbucket.org/a/b):

├── cmd
│   ├── c
│   │   └── main.go
│   └── d
│       └── main.go
├── config
│   ├── config.go
│   ├── default.json
│   └── development.json
├── go.mod
├── go.sum
├── log
│   └── log.go
├── main.go

Мне нужно скомпилировать 2 двоичных файла (по одному для каждого модуля в cmd /).

У меня естьпопытался запустить GO111MODULE=on go build ./cmd/c из корня проекта (~/go/src/bitbucket.org/a/b).Он тихо завершает работу, ничего не делая.

Я также попытался запустить GO111MODULE=on go build -o test ./cmd/c.Он создал файл 29kb test.Когда я добавляю к нему права на выполнение и запускаю, он заканчивается с ошибкой:

./test: 2: ./test: Syntax error: newline unexpected

Я попытался использовать go 1.12.5 и go 1.11.10.Также, когда я помещаю файл main.go из любого из каталогов cmd в корневой каталог проекта и собираю его, компилятор создает его нормально (размер двоичного файла составляет ~ 33 МБ).

Возможно ли использовать 2 записи компилятораочки в одном проекте?

1 Ответ

0 голосов
/ 08 июня 2019

Вы можете использовать go install ./..., и он создаст исполняемые файлы в каталоге $ GOPATH / bin, если вы хотите получить исполняемые файлы

А что касается нескольких точек входа компилятора, вы можете.Вы можете построить, используя go build ./cmd/c ./cmd/d ., но вы не можете получить исполняемые файлы в соответствии с документацией GO -o можно использовать только в случае одного пакета.Вместо этого вы можете написать make-файл , чтобы получить все исполняемые файлы с одной целью make.

А что касается ошибки, которую вы видите, мне потребуется дополнительная информация.Когда я пытался собрать пример приложения, все работало нормально.Однако я не использую флаг GO111MODULE.

enter image description here

  1. go build дает мне stackoverflow исполняемый файл
  2. go build -o test ./cmd/c дает мне тест исполняемый файл
  3. go build ./cmd/c дает мне c исполняемый файл

Для вашего удобства я загрузил проект в GitHub репо

...