команды go работают медленно на моей машине с Windows, и нормально на моем linux - PullRequest
0 голосов
/ 18 октября 2018

Я не знаю, сталкивается ли кто-то еще с этой проблемой.У меня есть файл main.go:

package main

import "fmt"

func main() {
    fmt.Println("hello world")
}

когда я запускаю go build, его запуск занимает 5 секунд (независимо от того, запускаю ли я его впервые или второй раз)

PS> Measure-Command {Start-Process go build -wait}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 5
Milliseconds      : 151
Ticks             : 51514117
TotalDays         : 5.96228206018519E-05
TotalHours        : 0.00143094769444444
TotalMinutes      : 0.0858568616666667
TotalSeconds      : 5.1514117
TotalMilliseconds : 5151.4117

Но когда я запускаю его на Linux-машине:

time go build

real    0m2.017s
user    0m0.054s
sys     0m1.915s

и когда я запускаю его во второй раз:

time go build

real    0m0.120s
user    0m0.072s
sys     0m0.088s

Это не толькоbuild, но также некоторые инструменты go, такие как fmt.На Linux это занимает 0,12 секунды, на Windows - почти 3 секунды.Другие инструменты, такие как guru, gocode и т. Д., Страдают той же проблемой, что делает разработку кода очень медленной.

Я использую golang 1.11.Я использую SSD, и все работает локально.Извините, я хотел бы быть более полезным, но я действительно не знаю, с чего начать, чтобы отладить это.

Кто-нибудь имеет представление о том, что происходит?

1 Ответ

0 голосов
/ 19 октября 2018

Кажется, что кэш сборки отключен в вашей Windows и включен в вашей Linux.

Go build сохраняет результаты компиляций и использует их повторно, если файл .go не имеетизменилось.Вот почему ваша вторая сборка так быстро работает в Linux.

Если вы отключите ее, каждый раз необходимо перекомпилировать не только ваш код, но и все зависимости.Таким образом, даже если вы измените свой код, все библиотеки (здесь «fmt») уже находятся в кеше.

Чтобы проверить это, запустите go clean -cache до go build в Linux и посмотрите, соответствует ли времяко времени на вашей Windows.Затем, если он совпадает, вы должны выяснить, почему кеш сборки отключен в Windows.

Чтобы просмотреть каталог кеша, введите go env GOCACHE.Если ответ отключен, кэш отключен.В противном случае убедитесь, что репозиторий существует и у него есть необходимые разрешения.

Вы можете выбрать каталог кэша, установив значение переменной среды GOCACHE (извините, я не знаю, как это сделать в Windows).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...