Heim >Backend-Entwicklung >Golang >Wie drucke ich die Befehlszeilenausgabe von Silent Go-Anwendungen, die mit „-ldflags -H=windowsgui' kompiliert wurden?
Silent Go-Anwendungen und Befehlszeilenausgabe mit Windows-GUI-Flag
In Go-Anwendungen deaktiviert das Kompilieren mit -ldflags -H=windowsgui den Konsolenzugriff , wodurch verhindert wird, dass die Ausgabe im Befehlsfenster gedruckt wird. Um dieses Problem zu beheben und Versionsinformationen an der Eingabeaufforderung auszugeben, können die folgenden Schritte unternommen werden:
Das zugrunde liegende Problem besteht darin, dass der PE-Header der ausführbaren Datei die Subsystemvariable „Windows“ enthält, die den Prozess von jeder Konsole trennt . Zum Drucken an der Eingabeaufforderung ist eine explizite Konsolenanbindung erforderlich.
Das Syscall-Paket von Go stellt die Funktion „AttachConsole“ bereit, um dies zu erreichen. Der folgende Code demonstriert seine Verwendung:
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") } }
Nach dem Anhängen an die Konsole des übergeordneten Prozesses kann das Programm wie gewohnt mit fmt.Println an der Eingabeaufforderung drucken.
Zusätzlich zur Vollständigkeit Lösung: Erwägen Sie die Behandlung von Fehlerszenarien, indem Sie entweder ein neues Konsolenfenster mit AllocConsole() erstellen oder einen GUI-Dialog anzeigen, um den Benutzer über das Problem zu informieren.
Das obige ist der detaillierte Inhalt vonWie drucke ich die Befehlszeilenausgabe von Silent Go-Anwendungen, die mit „-ldflags -H=windowsgui' kompiliert wurden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!