web-dev-qa-db-fra.com

Comment créer un exécutable à partir de Golang qui n'ouvre pas de fenêtre de commande (cmd) lors de son exécution?

J'ai créé une application que je souhaite exécuter de manière invisible en arrière-plan (pas de commande/console cmd). Comment puis-je faire cela?

(Ceci est pour Windows, testé sur Windows 7 Pro 64 bits)

49
Bart Silverstrim

La documentation trouvée en ligne indique que je peux compiler avec quelque chose comme,

go build -ldflags -Hwindowsgui filename.go

Mais cela donne une erreur: unknown flag -Hwindowsgui

Avec les versions plus récentes (1.1?) Du compilateur, cela devrait fonctionner:

go build -ldflags -H=windowsgui filename.go

Quand j'ai continué à chercher, j'ai trouvé une note que la documentation officielle devrait être mise à jour bientôt, mais en attendant, il y a beaucoup d'exemples de réponses plus anciennes à cette erreur.

49
Bart Silverstrim

Utilisation de Go version 1.4.2

 go build -ldflags "-H windowsgui" 

À partir des documents Go:

go build [-o output] [-i] [build flags] [packages]

-ldflags 'flag list' arguments pour transmettre chaque appel de l'éditeur de liens 5l, 6l ou 8l.

34
Shannon

Si vous ne voulez pas taper les longues instructions de construction à chaque fois pendant le débogage mais que vous voulez quand même que la fenêtre de la console disparaisse, vous pouvez ajouter ce code au début de votre fonction principale:

package main

import "github.com/gonutz/w32"

func main() {
    console := w32.GetConsoleWindow()
    if console != 0 {
        _, consoleProcID := w32.GetWindowThreadProcessId(console)
        if w32.GetCurrentProcessId() == consoleProcID {
            w32.ShowWindowAsync(console, w32.SW_HIDE)
        }
    }
}

Vous pouvez maintenant compiler avec go build. Votre programme affichera la fenêtre de la console pendant un court instant au démarrage, puis la masquera immédiatement.

9
gonutz