dongsi2317 2018-04-05 14:26
浏览 366
已采纳

构建错误:未知字段“ HideWindow”

I'm making multi-platform Gui applications with golang and Qt. The application executes an external command.

In Windows, a DOS window is displayed when executing the external command. I gave the HideWindow attribute so as not to display this.

  command := exec.Command("hoge", "fuga")
  command.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}

this code works well in Windows, but the following error occurred in the build for MacOS.

unknown field 'HideWindow' in struct literal of type syscall.SysProcAttr

I modified the code as below, but I can not avoid the error. Are there any ideas?

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

1条回答 默认 最新

  • duangan9251 2018-04-05 14:28
    关注

    You cannot fix a compile-time error with a run-time check. You'll need to use build constraints to create separate implementations compatible with each platform. To stay DRY, you'll likely want to create a function that only handles the platform-specific behavior(s), so that the cross-platform code can then call into the platform-specific function (which may be a no-op on platforms that need no platform-specific behavior). So you might have a file for Windows, one for MacOS, and one for Linux (or whatever set of platforms you're supporting), each with a function like:

    // +build darwin
    
    package whatever
    
    func prepareBackgroundCommand(cmd *exec.Cmd) {
        cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
    }
    

    And another like:

    // +build !darwin
    
    package whatever
    
    func prepareBackgroundCommand(cmd *exec.Cmd) {
    }
    

    So that in your main (non-platform-specific) code, you can call prepareBackgroundCommand(command) and it will handle it correctly based on the platform it's being compiled for.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥15 linux tsi721的驱动编译后 insmod 提示 报错
    • ¥20 multisim测数据
    • ¥15 求无向连通网的所有不同构的最小生成树
    • ¥15 模拟器的framebuffer问题
    • ¥15 opencv检测轮廓问题
    • ¥15 单点式登录SSO怎么爬虫获取动态SSO_AUTH_ACCESS_Token
    • ¥15 在app设计的坐标区绘图,如何选定绘图范围
    • ¥30 哈夫曼编码译码器打印树形项目
    • ¥20 求完整顺利登陆QQ邮箱的python代码
    • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL