使用 Windows GUI 链接的 Go 应用程序将输出打印到命令行窗口
使用 -ldflags -H=windowsgui 标志编译 Go 应用程序时,生成的可执行文件设置为作为 Windows GUI 应用程序运行。默认情况下,GUI 应用程序无权访问控制台,从而阻止输出打印字符串。
要解决此问题,可以使用系统调用包将 GUI 进程显式附加到其父级控制台。这允许应用程序将输出打印到命令窗口:
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") } }
附加到父控制台后,应用程序可以使用标准 fmt.Println() 函数或直接写入 syscall.Stdout 打印输出。但是,如果 AttachConsole() 失败,应用程序应该:
以上是Go GUI 应用程序如何打印到命令行窗口?的详细内容。更多信息请关注PHP中文网其他相关文章!