Существует (не Go) приложение, которое запускает исполняемый файл Go в качестве подпроцесса сервера.Этот подпроцесс сам вызывает команду go
для определенных операций.
Приложение -> Сервер Go -> go
Исполняемый файл
Все они построены в системе с установленным Go 1.11.1.,И в этой системе нет никаких проблем.Тем не менее, на другой машине это не так, как я не могу понять.Оказывается, в системе установлен Go 1.11.5.
Вот ошибка, возникшая в результате процесса сервера Go, работающего на компьютере с установленным Go 1.11.5:
"couldn\'t exec \'go [list -e -json -compiled -test=true -export=false -deps=true -find=false --
/usr/local/Cellar/go/1.11.1/libexec/src/builtin]\': chdir
/usr/local/Cellar/go/1.11.1/libexec/src/builtin: no such file or directory *os.PathError"
Iопределил, что строка /usr/local/Cellar/go/1.11.1/libexec
фактически встроена в исполняемый файл сервера Go.Для этого я использовал strings
.
GOROOT не отменяется ни на одной машине.
На моей машине go env GOROOT
сообщает:
/usr/local/Cellar/go/1.11.1/libexec
На целимашина, go env GOROOT
сообщает:
/usr/local/Cellar/go/1.11.5/libexec
В качестве теста я использовал точно такую же настройку среды для запуска go env
в моем хост-приложении вместо запуска процесса сервера.Это также создает GOROOT /usr/local/Cellar/go/1.11.5/libexec
на целевой машине.
Если я do переопределяю GOROOT на /usr/local/Cellar/go/1.11.5/libexec
в среде, которая порождает процесс моего сервера Go, все работает правильноцелевой компьютер.
Итак, у меня есть обходной путь: сначала захватить GOROOT с помощью go env
, а затем переопределить GOROOT в среде серверного процесса.
Насколько я понимаю, вы никогда не должны устанавливать GOROOTТем не менее, похоже, что проблема заключается в несоответствии настроек GOROOT.И я особенно озадачен, потому что go env
выглядит точно так, как я думаю, должно быть на обеих машинах во всех случаях, которые я могу попробовать протестировать.
Я все еще подозреваю, что это как-то связано со средой оболочки, которая настроенадля запуска серверных подпроцессов.
Кто-нибудь знает, что может быть не так?