-ldflags でコンパイルされた GUI アプリケーションの出力をコマンド ウィンドウに出力する方法 -H=windowsgui
-ldflags で Go アプリケーションをコンパイルする -グラフィカル ユーザー インターフェイス (GUI) として使用される H=windowsgui は、コマンド ウィンドウへの出力の印刷に問題が生じる可能性があります。これは、Windows 上の GUI プロセスが通常、コンソールに関連付けられていないためです。
問題
アプリケーションが -H=windowsgui フラグを使用してコンパイルされると、印刷しようとしますprintln や fmt.Println などの標準メソッドを使用して出力すると、コマンドには何も表示されませんwindow.
解決策
このシナリオで出力を印刷するには、プロセスを親プロセスのコンソールに明示的にアタッチする必要があります。これは、syscall パッケージからアクセスできる 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 中国語 Web サイトの他の関連記事を参照してください。