cwd
フラグを使用するか、cwd と arg 0 から推論するかの 2 つのオプションを考えることができます。
-cwd パス/へ/アセット
path/to/exe -cwd=$(path/to/exe/assets)
内部的には、実行可能ファイルは cwd が指す場所に chdir し、アプリケーション全体で相対パスを使用できます。これには、ユーザーがプログラムを再コンパイルすることなくアセットを変更できるという追加の利点があります。
これは構成ファイルに対して行います。基本的には次の順序になります。
- -cwd 変数を探して cmd 引数を処理します (デフォルトは空です)。
- chdir から -cwd
- 設定ファイルをパースする
- コマンド引数を再解析し、構成ファイルの設定を上書きします
アプリにいくつの引数があるかはわかりませんが、特に Go にはこれらのアセットをコンパイルする標準のパッケージング ツールがないため、これは非常に便利であることがわかりました。
引数 0 から推測
もう 1 つのオプションは、最初の引数を使用して、実行可能ファイルへのパスを取得することです。このようなもの:
here := path.Dir(os.Args[0])
if !path.IsAbs(os.Args[0]) {
here = path.Join(os.Getwd(), here)
}
これにより、実行可能ファイルの場所へのパスが取得されます。ユーザーが残りのアセットを移動せずにこれを移動しないことが保証されている場合は、これを使用できますが、上記の -cwd のアイデアを使用する方がはるかに柔軟であることがわかります。彼らのシステムとそれを資産に向けるだけです。
最良の選択肢は、おそらく 2 つの組み合わせです。ユーザーが -cwd フラグを指定しない場合、おそらく何も移動していないため、arg 0 と cwd から推測します。cwd フラグはこれをオーバーライドします。