35

さまざまなプラットフォーム用に Go を使用してプログラムをコンパイルし、相対パスまたはその名前 (PATH 変数にある場合) を呼び出して実行します。

実行可能ファイルがどこにあるかを見つけることは可能ですか?

たとえば、私のプログラムは " foo( .exe)" と呼ばれます。(PATH にある場合)./fooを実行できます。foo../../subdir/subdir/foo

私は使用しようとしましたがos.Args[0]、プログラム名に「foo」以外の何かが含まれているかどうかを確認する必要があると思います。はいの場合は を使用しfilepath.Abs、いいえの場合は を使用します (関数名が見つかりません。PATH を調べてプログラムの場所を確認する関数があります)。

4

3 に答える 3

47

パッケージosextを使用します。

Executable()現在のプログラム実行可能ファイルへの絶対パスを返す関数を提供しています。システム間で移植可能です。

オンライン ドキュメント

package main

import (
    "github.com/kardianos/osext"
    "fmt"
)

func main() {
    filename, _ := osext.Executable()
    fmt.Println(filename)
}
于 2013-02-23T07:27:58.357 に答える
4

これは go 固有のものではなく (go の「標準ライブラリ」にそれを行うための関数が含まれていない限り)、移植可能なソリューションはありません。いくつかの一般的なプラットフォームでのソリューションについては、たとえばC で実行可能ファイルの場所を見つけるにはどうすればよいですか? を参照してください。 または/proc/self/exe なしで現在の実行可能ファイルのパスを見つける

于 2012-08-23T11:09:50.750 に答える