如何从Golang创建一个在运行时不打开命令(cmd)窗口的可执行文件?

Bar*_*rim 50 console go

我创建了一个我想在后台无形运行的应用程序(没有命令/ cmd控制台).我该怎么做呢?

(这适用于Windows,在Windows 7 Pro 64位上测试过)

Bar*_*rim 50

在线发现的文档说我可以编译一些类似的东西,

go build -ldflags -Hwindowsgui filename.go

但是这给出了一个错误: unknown flag -Hwindowsgui

对于最新的(1.1?)版本的编译器,这应该工作:

go build -ldflags -H=windowsgui filename.go

当我继续搜索时,我发现了一个注释,官方文档应该很快更新,但同时有很多旧式的示例答案出现错误.


Sha*_*ews 36

使用Go版本1.4.2

 go build -ldflags "-H windowsgui" 
Run Code Online (Sandbox Code Playgroud)

来自Go文档:

go build [-o output] [-i] [build flags] [packages]
Run Code Online (Sandbox Code Playgroud)

-ldflags 'flag list' 传递每个5l,6l或8l链接器调用的参数.


gon*_*utz 9

如果您不希望每次在调试期间键入长构建指令但仍希望控制台窗口消失,则可以在主函数的开头添加此代码:

package main

import "github.com/gonutz/w32"

func main() {
    console := w32.GetConsoleWindow()
    if console != 0 {
        _, consoleProcID := w32.GetWindowThreadProcessId(console)
        if w32.GetCurrentProcessId() == consoleProcID {
            w32.ShowWindowAsync(console, w32.SW_HIDE)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以编译了go build.您的程序将在启动时显示控制台窗口一小段时间,然后立即隐藏它.