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` ?

Pourquoi mon application Go ne peut-elle pas s'imprimer sur la console lorsqu'elle est compilée avec `-ldflags -H=windowsgui` ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 05:32:10564parcourir

Why Can't My Go Application Print to the Console When Compiled with `-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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn