-H=windowsgui フラグを使用した出力の印刷
-ldflags -H=windowsgui フラグを使用して Go アプリケーションをコンパイルすると、印刷できない場合があります出力をコマンド ウィンドウに出力できるようになります。これは、実行可能ファイルが、コンソールから呼び出された場合でも、コンソールに関連付けられていない GUI プロセスとして作成されるためです。
このシナリオで出力を印刷するには、プロセスを明示的にコンソールにアタッチする必要があります。これは、syscall パッケージを使用して実現できます。
package main import ( "fmt" "syscall" ) const ( ATTACH_PARENT_PROCESS = ^uint32(0) ) 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("Attached") } }
AttachConsole(ATTACH_PARENT_PROCESS) を呼び出すことにより、Go プロセスはその親プロセスに関連付けられたコンソールに接続されます。その後、出力をコンソールに出力できます。
AttachConsole が失敗した場合は、AllocConsole を使用してコンソール ウィンドウを手動で作成するか、適切な GUI ライブラリを使用して必要な情報を含む GUI ダイアログを表示する必要がある場合があります。
以上が「-ldflags -H=windowsgui」を使用してコンパイルすると、Go アプリケーションがコンソールに出力できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。