ホームページ > バックエンド開発 > Golang > 「-ldflags -H=windowsgui」を使用してコンパイルすると、Go アプリケーションがコンソールに出力できないのはなぜですか?

「-ldflags -H=windowsgui」を使用してコンパイルすると、Go アプリケーションがコンソールに出力できないのはなぜですか?

Linda Hamilton
リリース: 2024-12-03 05:32:10
オリジナル
612 人が閲覧しました

Why Can't My Go Application Print to the Console When Compiled with `-ldflags -H=windowsgui`?

-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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート