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