После обновления с Go 1.2.1 до 1.3 (Windows 7 64 бит) время выполнения "go build" увеличилось с 4 до 45 секунд. Изменений не было, кроме обновления версии go. Отключение антивирусного сканера кажется неэффективным. Любые подсказки?
"go build" стало очень медленным после установки новой версии Go
Ответ 1
У вас, вероятно, есть зависимости, которые перекомпилируются каждый раз. Попробуйте go install -a mypackage
перестроить все зависимости.
Удаление $GOPATH/pkg
также помогает гарантировать, что у вас нет старых объектных файлов.
Здание с флагом -x
покажет вам, если инструментальная цепочка находит несовместимые версии.
Ответ 2
У меня есть одна и та же проблема, выполнение этой команды решает ее:
go get -u -v github.com/mattn/go-sqlite3
Еще один совет: http://kokizzu.blogspot.co.id/2016/06/solution-for-golang-slow-compile.html
Ответ 3
Использование go1.6,
Просто запустите go build -i
.
Он скомпилирует все зависимости и сохранит их в $GOPATH/pkg/*/*
как .a.
Позже, когда вы запустите go run main.go
, все будет намного быстрее.
Что действительно замечательно в том, что если вы используете зависимые от поставщика (IE: папку поставщика в вашем проекте), депо встроены соответствующим образом в пределах $GOPATH/pkg/**/yourproject/vendor/**
Таким образом, вы не должны go get install/get/whatever
и иметь смешанные зависимости поставщиков/глобальных.
Я подозреваю, что вам нужно перестроить файлы .a после обновления deps (glide update или smthg, как это), но я еще не тестировал это.
Ответ 4
Я только что испытал ту же проблему - обновление с 1.4 до 1.5. Кажется, что версии olds каким-то образом несовместимы или каждый раз перестраиваются, когда отображается go build -x
. Выполнение go get -v
отменяет все пакеты или повторяет их, я не совсем уверен, а go build -x
показывает довольно малое количество выходных данных.
Ответ 5
Вы можете построить sqlite3 следующим образом:
cd ./vendor/github.com/mattn/go-sqlite3/
go install
После этого ваш проект будет построен намного быстрее.
Ответ 6
Если вы попытаетесь, так как все остальные сказали, но все еще не работают, я предлагаю удалить каталог $GOPATH
, например:
sudo rm -rf $GOPATH
cd yourproject
go get -d
go get -u -v github.com/mattn/go-sqlite3
Ответ 7
После перехода 1.10 вам просто нужно ввести go build
. Вам не нужно вводить: go build -i
.
Из документа проекта Go 1.10 здесь.
Сборка и установка
Команда go build теперь обнаруживает устаревшие пакеты, основанные исключительно на содержании исходных файлов, указанных флагов сборки и метаданных, хранящихся в скомпилированных пакетах. Время модификации больше не рассматривается или не имеет отношения к делу. Старый совет для добавления -a для принудительного восстановления в случаях, когда времена модификации вводят в заблуждение по той или иной причине (например, изменения в строках) больше не требуется: теперь сборки всегда обнаруживают, когда пакеты должны быть перестроены. (Если вы заметили иное, напишите об ошибке.)
...
Команда go build теперь поддерживает кеш недавно созданных пакетов, отдельно от установленных пакетов в $GOROOT/pkg или $GOPATH/pkg.. Эффект кэша должен заключаться в скорости сборки не устанавливайте явно пакеты или при переключении между разными копиями исходного кода (например, при изменении между разными ветвями в системе управления версиями). Старый совет по добавлению флага -i для скорости, как в go build -i или go test -i, больше не нужен: сборка выполняется так же быстро, как и -i. Для получения дополнительной информации см. Раздел "Кэш справки".