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