Go 生成错误:未知字段';隐藏窗口&x27;

Go 生成错误:未知字段';隐藏窗口&x27;,go,Go,我正在用golang和Qt制作多平台Gui应用程序。应用程序执行一个外部命令 在Windows中,执行外部命令时会显示DOS窗口。我设置了HideWindow属性,以便不显示该属性 command := exec.Command("hoge", "fuga") command.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} 此代码在Windows中运行良好,但在MacOS的构建中出现以下错误 unknown field

我正在用golang和Qt制作多平台Gui应用程序。应用程序执行一个外部命令

在Windows中,执行外部命令时会显示DOS窗口。我设置了HideWindow属性,以便不显示该属性

  command := exec.Command("hoge", "fuga")
  command.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
此代码在Windows中运行良好,但在MacOS的构建中出现以下错误

unknown field 'HideWindow' in struct literal of type syscall.SysProcAttr
我修改了代码如下,但我不能避免错误。有什么想法吗

 if runtime.GOOS == "windows" {
  command.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
 }

无法通过运行时检查修复编译时错误。您需要使用创建与每个平台兼容的单独实现。为了保持冷静,您可能希望创建一个只处理特定于平台的行为的函数,这样跨平台代码就可以调用特定于平台的函数(在不需要特定于平台的行为的平台上可能是禁止操作的)。因此,您可能有一个适用于Windows的文件,一个适用于MacOS,一个适用于Linux(或您支持的任何平台集),每个文件都具有如下功能:

// +build darwin

package whatever

func prepareBackgroundCommand(cmd *exec.Cmd) {
    cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
}
还有一种是:

// +build !darwin

package whatever

func prepareBackgroundCommand(cmd *exec.Cmd) {
}

因此,在主(非平台特定)代码中,您可以调用
prepareBackgroundCommand(command)
,它将根据编译它的平台正确处理它。

HideWindow
如果您不在windows上,则根本不存在。应该是
/+build-windows
/+build!windows
。它不像只有两个平台,Windows和macOS。而且,我可以在任何地方使用
xgo
进行编译。