So drucken Sie die Ausgabe im Befehlsfenster für GUI-Anwendungen, die mit -ldflags -H=windowsgui kompiliert wurden
Kompilieren einer Go-Anwendung mit -ldflags - H=windowsgui zur Verwendung als grafische Benutzeroberfläche (GUI) kann beim Drucken der Ausgabe im Befehlsfenster zu Problemen führen. Dies liegt daran, dass GUI-Prozesse unter Windows normalerweise nicht mit einer Konsole verknüpft sind.
Problem
Wenn eine Anwendung mit dem Flag -H=windowsgui kompiliert wird, wird versucht zu drucken Die Ausgabe mit Standardmethoden wie println oder fmt.Println führt dazu, dass im Befehl nichts angezeigt wird Fenster.
Lösung
Um die Ausgabe in diesem Szenario zu drucken, müssen Sie den Prozess explizit an die Konsole seines übergeordneten Prozesses anhängen. Dies kann mithilfe der AttachConsole-API-Funktion erreicht werden, auf die über das Syscall-Paket zugegriffen werden kann:
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") } }
Rufen Sie AttachConsole(ATTACH_PARENT_PROCESS) auf, bevor Sie versuchen, die Ausgabe zu drucken, wodurch der Prozess mit der übergeordneten Konsole verbunden wird. Nach diesem Schritt können Sie wie gewohnt Standarddruckmethoden verwenden.
Zusätzliche Optionen
Wenn AttachConsole fehlschlägt, können Sie diese Alternativen in Betracht ziehen:
Das obige ist der detaillierte Inhalt vonWie drucke ich aus einer Go-GUI-Anwendung, die mit „-ldflags -H=windowsgui' kompiliert wurde, in das Befehlsfenster?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!