Heim >Backend-Entwicklung >Golang >Warum kann meine Go-Anwendung nicht auf der Konsole gedruckt werden, wenn sie mit „-ldflags -H=windowsgui' kompiliert wird?

Warum kann meine Go-Anwendung nicht auf der Konsole gedruckt werden, wenn sie mit „-ldflags -H=windowsgui' kompiliert wird?

Linda Hamilton
Linda HamiltonOriginal
2024-12-03 05:32:10564Durchsuche

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

Ausgabe mit der Flagge -H=windowsgui drucken

Beim Kompilieren einer Go-Anwendung mit der Flagge -ldflags -H=windowsgui ist dies möglicherweise nicht der Fall in der Lage sein, die Ausgabe in einem Befehlsfenster zu drucken. Dies liegt daran, dass die ausführbare Datei als GUI-Prozess erstellt wird, der keiner Konsole zugeordnet ist, selbst wenn er über die Konsole aufgerufen wird.

Um in diesem Szenario eine Ausgabe zu drucken, muss man den Prozess explizit an die Konsole anhängen. Dies kann mit dem Syscall-Paket erreicht werden:

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")
    }
}

Durch den Aufruf von AttachConsole(ATTACH_PARENT_PROCESS) wird der Go-Prozess an die Konsole angehängt, die seinem übergeordneten Prozess zugeordnet ist. Anschließend kann die Ausgabe an die Konsole ausgegeben werden.

Wenn AttachConsole fehlschlägt, kann es erforderlich sein, mithilfe von AllocConsole manuell ein Konsolenfenster zu erstellen oder mithilfe geeigneter GUI-Bibliotheken einen GUI-Dialog mit den gewünschten Informationen anzuzeigen.

Das obige ist der detaillierte Inhalt vonWarum kann meine Go-Anwendung nicht auf der Konsole gedruckt werden, wenn sie mit „-ldflags -H=windowsgui' kompiliert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn