如何将使用 -ldflags 编译的 GUI 应用程序的输出打印到命令行窗口 -H=windowsgui
使用 -ldflags 编译 Go 应用程序 - H=windowsgui 用作图形用户界面 (GUI) 可能会给将输出打印到命令窗口带来挑战。这是因为 Windows 上的 GUI 进程通常不与控制台关联。
问题
当使用 -H=windowsgui 标志编译应用程序时,尝试打印使用 println 或 fmt.Println 等标准方法进行输出会导致命令中不显示任何内容window.
解决方案
要在这种情况下打印输出,您需要将进程显式附加到其父进程的控制台。这可以使用 AttachConsole API 函数来实现,该函数可通过系统调用包访问:
package main import ( "fmt" "syscall" ) const ( ATTACH_PARENT_PROCESS = ^uint32(0) // (DWORD)-1 ) 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(ATTACH_PARENT_PROCESS) if ok { fmt.Println("Okay, attached") } }
在尝试打印输出之前调用 AttachConsole(ATTACH_PARENT_PROCESS),这会将进程连接到父控制台。完成此步骤后,您可以照常使用标准打印方法。
其他选项
如果 AttachConsole 失败,您可以考虑以下替代方案:
以上是如何从使用 `-ldflags -H=windowsgui` 编译的 Go GUI 应用程序打印到命令行窗口?的详细内容。更多信息请关注PHP中文网其他相关文章!