gpt4 book ai didi

go - 构建错误 : unknown field 'HideWindow'

转载 作者:IT王子 更新时间:2023-10-29 02:02:08 28 4
gpt4 key购买 nike

我正在使用 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}
}

最佳答案

您无法通过运行时检查来修复编译时错误。您需要使用 build constraints创建与每个平台兼容的单独实现。为了保持 DRY,您可能希望创建一个仅处理特定于平台的行为的函数,以便跨平台代码随后可以调用特定于平台的函数(这可能是一个空操作不需要平台特定行为的平台)。因此,您可能有一个适用于 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),它会根据正在编译的平台正确处理它。

关于go - 构建错误 : unknown field 'HideWindow' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49674855/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com