Maison >développement back-end >Golang >Pourquoi mon application Go ne peut-elle pas s'imprimer sur la console lorsqu'elle est compilée avec `-ldflags -H=windowsgui` ?
Impression de la sortie avec l'indicateur -H=windowsgui
Lors de la compilation d'une application Go avec l'indicateur -ldflags -H=windowsgui, il se peut qu'elle ne être capable d'imprimer la sortie dans une fenêtre de commande. En effet, l'exécutable est créé en tant que processus GUI qui n'est associé à aucune console, même lorsqu'il est invoqué depuis la console.
Pour imprimer la sortie dans ce scénario, il faut explicitement attacher le processus à la console. Ceci peut être réalisé à l'aide du package syscall :
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") } }
En appelant AttachConsole(ATTACH_PARENT_PROCESS), le processus Go est attaché à la console associée à son processus parent. Il peut ensuite imprimer le résultat sur la console.
Si AttachConsole échoue, il peut être nécessaire de créer manuellement une fenêtre de console à l'aide d'AllocConsole ou d'afficher une boîte de dialogue GUI avec les informations souhaitées à l'aide des bibliothèques GUI appropriées.
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!