web-dev-qa-db-ja.com

実行時にコマンド(cmd)ウィンドウを開かないGolangから実行可能ファイルを作成するにはどうすればよいですか?

バックグラウンドで目に見えないように実行したいアプリケーションを作成しました(コマンド/ cmdコンソールなし)。どうすればいいですか?

(これはWindows用で、Windows 7 Pro 64ビットでテスト済みです)

49

オンラインで見つかったドキュメントには、次のように何かをコンパイルできると書かれています。

go build -ldflags -Hwindowsgui filename.go

しかし、これはエラーを与えます:unknown flag -Hwindowsgui

コンパイラのより新しい(1.1?)バージョンでは、これは動作するはずです:

go build -ldflags -H=windowsgui filename.go

私が周りを探し続けたとき、私は公式ドキュメントがすぐに更新されるべきであるというメモを見つけましたが、その間、そのエラーがそこにある古いスタイルの例の答えがたくさんあります。

49

Goバージョン1.4.2の使用

 go build -ldflags "-H windowsgui" 

Goドキュメントから:

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

-ldflags 'flag list'引数は、5l、6l、または8lの各リンカー呼び出しで渡されます。

34
Shannon

デバッグ中に毎回長いビルド指示を入力したくないが、コンソールウィンドウを非表示にする場合は、メイン関数の開始時にこのコードを追加できます。

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)
        }
    }
}

これで、go buildでコンパイルできます。プログラムは、起動時に短時間コンソールウィンドウを表示し、すぐに非表示にします。

9
gonutz