こんばんは。このところ、残業で遅く帰ることが多く、ワンオペ嫌いの妻は子供達に洗濯物干しの手伝いをさせています。@kjunichiです。
背景
go getはよく使うが、go installをすると、実行したディレクトリの.goファイルをビルドして、 $GOPATH/binにインストールしてくれると言うのを最近知ったorz。
問題
gopheronでgo installを試すと、$GOPATH/binにgopheronコマンドをインストールできた。
しかし、起動すると「Unable to find Electron app」
というエラーになる。これはElectronが文句を言っている模様。
現状のgopheronでもgoの実行ファイルからインストールされたelectronを実行しているが go installでインストール後に任意のディレクトリからコマンドを実行するにはまだ対応が不足している模様。
gopheronをgo installして動くように対応するには
GOPATHを基準にパスを指定する
とりあえず、自分の環境でGOPATHを未定義、もしくはパスが1つのみの環境に対応するように割り切り、作業を進めた。
GOPATHが定義されている場合、macOS、Linuxでは
$GOPATH/go/src/github.com/kjunichi/gopheron
にgopheronのコードがgo getすると入れられる。
Windowsの場合は
%GOPATH%/src/github.com/kjunichi/gopheron
となる。
これらを基準となるフォルダへのパスを設定することにした。
Goでの具体的な実装は
$HOME/go/src/github.com/kjunichi/gopheron
にcdすることで対応した。
windowsの場合は、GOPATHが未定義の場合、環境変数%USERPROFILE%をつかって、
%USERPROFILE%/go/src/github.com/kjunichi/gopheron
環境変数が未定義かを判定するには
以下のようにlen関数を使うことで対応した。
goPath := os.Getenv("GOPATH") if len(goPath) == 0 { if runtime.GOOS == "windows" { goPath = os.Getenv("USERPROFILE") + "/go" } else { goPath = os.Getenv("HOME") + "/go" } }
goでカレントディレクトリを移動するには
rutimeパッケージをインポートして、
import ( "runtime" )
os.Chdir(ディレクトリパス)で移動できる。
gopheronPath = getGopath() + "/src/github.com/kjunichi/gopheron"
os.Chdir(gopheronPath)
成果物
まとめ
goでの環境変数の取得、空文字列の判定ができるようになった。 あと、カレントディレクトリの移動方法も学んだ