カレントファイルのファイル名やディレクトリ名を知りたい
runtime.Callerを利用し、stackの返り値を利用すれば解決できる、というのを
グーグル先生で検索して知った。
元ソース
https://gist.github.com/abrookins/2732551#file-gistfile1-go
code snippet
import (
"runtime"
"path"
)
// __FILE__
func GetCurrentFile() string {
_, filename, _, _ := runtime.Caller(1)
return filename
}
// __DIR__
func GetCurrentDir() string {
_, filename, _, _ := runtime.Caller(1)
return path.Dir(filename)
}
利用シーン
ライブラリとコマンドライン、それぞれのソースコードを
同一プロダクト且つ別ディレクトリで管理する形にし、
テスト実行時・コマンド実行時に解決するファイルパスを
都度解決させたいという場合に役に立つ。
takarabagoというtakarabakoのパクリプロダクトをGoの勉強目的で書いてみた時に利用した。