Ausgabe an das Befehlsfenster mit Windows-GUI-verknüpften Go-Anwendungen drucken
Beim Kompilieren von Go-Anwendungen mit der Flagge -ldflags -H=windowsgui Die resultierende ausführbare Datei ist so eingestellt, dass sie als Windows-GUI-Anwendung ausgeführt wird. Standardmäßig haben GUI-Anwendungen keinen Zugriff auf die Konsole, wodurch die Ausgabe gedruckter Zeichenfolgen verhindert wird.
Um dieses Problem zu beheben, kann das Syscall-Paket verwendet werden, um den GUI-Prozess explizit an die übergeordnete Konsole anzuhängen. Dadurch kann die Anwendung die Ausgabe im Befehlsfenster drucken:
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 Anschließen an die übergeordnete Konsole kann die Anwendung die Ausgabe mit der Standardfunktion fmt.Println() drucken oder direkt in syscall.Stdout schreiben. Wenn AttachConsole() jedoch fehlschlägt, sollte die Anwendung entweder:
Das obige ist der detaillierte Inhalt vonWie können Go-GUI-Anwendungen im Befehlsfenster gedruckt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!