Я работаю над кодом в Go, который установит программу. Он должен работать с системами Linux и Windows. Я использую Intellij.
if isWindows() {
cmd := exec.Command("msiexec.exe", "/i", filename, "/quiet", "L*V", installLog)
cmd.SysProcAttr = &syscall.SysProcAttr{
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
}
if err := cmd.Start(); err != nil {
log.Printf(failedInstallMsg, filename, err)
return
}
} else if isLinux() {
cmd := exec.Command("sudo", "-n", packageManagerTool, "--disablerepo=*", "install", "-y", filename)
cmd.SysProcAttr = &syscall.SysProcAttr{
Setpgid: true,
Pgid: 0,
}
if err := cmd.Start(); err != nil {
log.Printf(failedInstallMsg, filename, err)
return
}
}
}
Моя проблема в том, что, поскольку в IDE Go Project settings> Build tags для ОС установлено значение Linux, то поля структуры syscall.SysProcAttr доступны только для Linux. Это означает, что строка в случае windows, которая инициализирует структуру с помощью
cmd.SysProcAttr = &syscall.SysProcAttr{
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
}
, вызывает ошибку компиляции
unknown field CreationFlags in struct literal
Я попытался добавить
// +build linux windows
At в верхней части файла, но это не помогает.
Есть ли простой способ сосуществования кода для windows и linux, как описано выше?