非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Go言語で実行ファイル本体とショートカットの保存先アドレスを取得する

   

Go言語に限らず「カレントディレクトリの取得方法」はネットで簡単に探せますが、それが実行ファイル本体の置き場なのかショートカットの置き場所なのかよくわからない説明になっていますね。

これを把握せずに使うと後で痛い目に合うのでいったいどっちなのか把握することが大事です。説明になければ自分自身で試してみると良いでしょう。

Go言語はどちらのアドレスを取得する方法が用意されています。(もちろん他の言語でも同じでしょう)

osパッケージの中のGetwd()Executable()があり、前者がリンク先(実行場所)のアドレス、後者が実行ファイルの場所を示します。

package main

import "fmt"
import "os"

func main() {
  path, _ := os.Getwd()
  exe, _ := os.Executable()
  fmt.Println(path)
  fmt.Println(exe)
}

 

上記プログラムをビルドしたあとに実行してみると以下のようになります。実行場所と実行ファイルが同じ場合の例です。Executable()はファイル名まで含まれます。

 

次にその実行ファイルのショートカットを作り、どこか適当な場所に置いてそこから実行すると以下の通り。

 

例えば、JavaのクラスファイルのランチャーをGo言語で作ろうとした場合、os.Getwd()でカレントディレクトリを得ようとすると問題が置きます。そのランチャーは別の場所でショートカットファイルによって実行されるケースがあるためです。

 

スポンサーリンク

 - Go言語