34

I tried various ways of creating a Go program that only displays either a MessageBox or a standalone GUI window. If I were to write this in C / C++ I would just define a WinMain, leave out the main and I would be good to go. It seems to me that as soon as I define a main function a console window is created automatically. And the main function is compulsory.

package main
func main() {
...
}

To avoid this I tried an example which creates a WinMain

func WinMain(wproc uintptr) {
    hInstance := GetModuleHandle(nil)
    ...
}

But the effect is the same: an empty console window and a GUI window: enter image description here

Community
  • 1
  • 1
Marged
  • 10,577
  • 10
  • 57
  • 99

1 Answers1

72

Add -ldflags -H=windowsgui to your go build/install command line. You'll see that the console window is absent:

enter image description here

TriskalJM
  • 2,393
  • 1
  • 19
  • 20
  • 3
    when I call `go build -ldflags -Hwindowsgui guionly.go` I get `flag provided but not defined: -Hwindowsgui` – Marged Apr 19 '16 at 20:53
  • 1
    Looks like I forgot the `=` sign there. See edited answer. – TriskalJM Apr 19 '16 at 21:05
  • 3
    Thanks a lot, I didn't see the missing `=`. And what's even worse: _now_ I was able to find a similar question that was asked before ;-) http://stackoverflow.com/questions/23250505/how-do-i-create-an-executable-from-golang-that-doesnt-open-a-command-cmd-wind – Marged Apr 20 '16 at 03:15
  • this works for https://github.com/inkyblackness/imgui-go-examples, too – user259819 Mar 13 '21 at 11:54