如何將使用-ldflags 編譯的GUI 應用程式的輸出列印到命令列視窗-H=windowsgui
使用-ldflags 編譯應用程式- 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中文網其他相關文章!