关于go:如何从Golang创建一个运行时不打开控制台窗口的可执行文件?

How do I create an executable from Golang that doesn't open a console window when run?

我创建了一个我想在后台(无控制台)不可见地运行的应用程序。我该怎么做?

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


网上找到的文档说我可以用类似的东西编译,

go build -ldflags -Hwindowsgui filename.go

但这会报错:unknown flag -Hwindowsgui

使用更新的(1.1?)编译器版本,这应该可以工作:

go build -ldflags -H=windowsgui filename.go

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


使用 Go 版本 1.4.2

1
 go build -ldflags"-H windowsgui"

From the Go docs:

1
go build [-o output] [-i] [build flags] [packages]

-ldflags 'flag list' arguments to pass on each 5l, 6l, or 8l linker invocation.

  • 去构建文档
  • ldflags 文档


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

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import"github.com/gonutz/w32/v2"

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

现在您可以使用 go build 进行编译。您的程序将在启动时短暂显示控制台窗口,然后立即将其隐藏。