2017-02-22 61 views
1

Я только начал писать Go сегодня (так что 0 опыта), и интересно, если Go поддерживает любую форму «создания всех исходных файлов», как это делает mvn install.Перейти построить несколько/вложенных пакетов?

Моя структура проекта

src 
    `-github.com 
      `-myproject 
       |- package1 
       |  `- main.go 
       `- package2 
        |- lib1_used_by_main.go 
        `- lib2_used_by_main.go 

Когда я

cd src/github.com/myproject 
go build 

это не удается с no buildable Go source files in src/github.com/myproject, который отчасти прав, потому что все исходные файлы находятся в подпакетов.

Есть ли команда для создания всех подпакетов, без указания каждого из них явно?

+2

Любые необходимые пакеты создаются по мере необходимости, вам не нужно ничего делать. Вам нужно только построить main, так как 'go build' на не основной упаковке не создает никаких артефактов. – JimB

+0

Мне часто нужно это делать, поэтому моя автозаполнение работает в SublimeText. – RayfenWindspear

+0

@JimB Это неверно. Построение неосновных пакетов создает источник и помещает его в 'go/pkg'. Все, что требуется (например, IDE), которое полагается на папку 'go/pkg', будет полезно для своевременного обновления. См. Мой ответ. – RayfenWindspear

ответ

4

После того, как вы установили cd в базовый каталог, используйте go build ./... Обратите внимание, что существует 3 периода, так как это многоточие. Это будет рекурсивно строить все подкаталоги. Конечно, вы всегда можете сделать go build path/to/my/base/... откуда бы то ни было, без cd в каталог.

Это очень полезно для тех, кто использует IDE, которая опирается на каталог go/pkg, такой как SublimeText3 с GoSublime. Внесение изменений в пакет зависимостей не будет обновлять автозаполнения до тех пор, пока вы не создадите пакет, который помещает его в каталог go/pkg.

Мои собственные проекты разбиты на несколько структур упаковки, поэтому мне часто приходится go build ./... обновить мою автозаполнение.

+0

Я пробовал это, но, похоже, он не работает с 'vendor', так как он пытается создать в нем что-то и не работает, а зависимости не найдены. Вы знаете, как это решить? – stackoverflower

+0

Это дает вам «не найти импорт ...»? Если это так, вам нужно «идти» каждый отдельный импорт, который он перечисляет. – RayfenWindspear