Golang で指定ファイルを関連付けで開く on Windows

たとえば hoge.ini というコマンドラインを与えると、Windows であれば「ini に関連付けられたテキストエディタ」で開いてくれる。しかし Golang の exec.Command() では開いてくれない。さあどうする?

ini ファイルを何で開くかを明示的に与える?

一般論として、お使いのエディタに ini ファイルパスを指定したコマンドラインを実行すれば良い。でも「お使いのエディタ」はどうやって取得する?まさか関連付けの仕組み(assoc コマンドやらレジストリやら)を愚直に辿らねばならないというのか……。

もっとスマートな解があった

調べてたら、ああ、なるほどと氷解。start コマンドでラップする のですね。

以下サンプル。

if doEditIni {
    err := exec.Command("cmd", "/c", "start", "", yourCommandLine).Start()
    if err != nil {
        fmt.Printf("Fail to read file '%v'", err)
    }
    success()
}

ただし start コマンドだけでは開けない(start コマンドは start.exe ではなく cmd.exe が持つ機能)ので、さらに cmd をかます必要がある。

参考: open-golang/exec_windows.go at master · skratchdot/open-golang