Applications Go silencieuses et sortie de ligne de commande avec l'indicateur de l'interface graphique Windows
Dans les applications Go, la compilation avec -ldflags -H=windowsgui désactive l'accès à la console , empêchant l'impression de la sortie dans la fenêtre de commande. Pour résoudre ce problème et imprimer les informations de version sur l'invite de commande, les étapes suivantes peuvent être suivies :
Le problème sous-jacent est que l'en-tête PE de l'exécutable contient la variable du sous-système "Windows", qui dissocie le processus de toute console. . Pour imprimer vers l'invite de commande, une pièce jointe explicite à la console est requise.
Le package syscall de Go fournit la fonction AttachConsole pour y parvenir. Le code ci-dessous démontre son utilisation :
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") } }
Après s'être connecté à la console du processus parent, le programme peut imprimer sur l'invite de commande en utilisant fmt.Println comme d'habitude.
De plus, pour un aperçu complet solution, envisagez de gérer les scénarios d'échec en créant une nouvelle fenêtre de console avec AllocConsole() ou en affichant une boîte de dialogue GUI pour informer l'utilisateur du problème.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!