使用 -ldflags -H=windowsgui 打印到命令提示符
使用 -ldflags -H=windowsgui 编译 Go 应用程序时,标准输入/输出句柄被关闭,这使得将输出打印到命令提示符变得困难。为了克服这个限制,有必要将进程附加到其父进程的控制台。
实现此目的的一种方法是使用 syscall 包的 AttachConsole 函数:
package main import ( "fmt" "syscall" ) var ( modkernel32 = syscall.NewLazyDLL("kernel32.dll") procAttachConsole = modkernel32.NewProc("AttachConsole") ) func AttachConsole(dwParentProcess uint32) (ok bool) { r0, _, _ := syscall.Syscall(procAttachConsole.Addr(), 1, uintptr(dwParentProcess), 0, 0) ok = bool(r0 != 0) return } func main() { ok := AttachConsole(syscall.ATTACH_PARENT_PROCESS) if ok { fmt.Println("Okay, attached") } }
通过调用 AttachConsole,该进程可以访问控制台并根据需要打印消息。
如果 AttachConsole 失败,替代选项包括创建 GUI 对话框或使用 AllocConsole 分配新的控制台窗口。但是,在 GUI 对话框中显示消息可能更加用户友好,并且适合显示通常与控制台关联的版本信息。
以上是在 Go 中使用 `-ldflags -H=windowsgui` 时如何打印到命令提示符?的详细内容。更多信息请关注PHP中文网其他相关文章!