non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

go installを知ったのでgopheronを対応させた

こんばんは。このところ、残業で遅く帰ることが多く、ワンオペ嫌いの妻は子供達に洗濯物干しの手伝いをさせています。@kjunichiです。

背景

go getはよく使うが、go installをすると、実行したディレクトリの.goファイルをビルドして、 $GOPATH/binにインストールしてくれると言うのを最近知ったorz。

問題

gopheronでgo installを試すと、$GOPATH/binにgopheronコマンドをインストールできた。

しかし、起動すると「Unable to find Electron app」

f:id:kjw_junichi:20190724224738p:plain

というエラーになる。これはElectronが文句を言っている模様。

現状のgopheronでもgoの実行ファイルからインストールされたelectronを実行しているが go installでインストール後に任意のディレクトリからコマンドを実行するにはまだ対応が不足している模様。

gopheronをgo installして動くように対応するには

GOPATHを基準にパスを指定する

とりあえず、自分の環境でGOPATHを未定義、もしくはパスが1つのみの環境に対応するように割り切り、作業を進めた。

GOPATHが定義されている場合、macOSLinuxでは

$GOPATH/go/src/github.com/kjunichi/gopheron

にgopheronのコードがgo getすると入れられる。

Windowsの場合は

%GOPATH%/src/github.com/kjunichi/gopheron

となる。

これらを基準となるフォルダへのパスを設定することにした。

Goでの具体的な実装は

macOSLinuxの場合GOPATHが未定義の場合、

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

成果物

github.com

まとめ

goでの環境変数の取得、空文字列の判定ができるようになった。 あと、カレントディレクトリの移動方法も学んだ

関連記事

14年前の記事

13年前の記事

11年前の記事