先に言っておくと根本的な解決方法は無いです。
goの実行ファイルにはファイルパスが含まれている
golangで書いたアプリケーションには、ビルド時のフルパスが必ず含まれていいます。これはパニックした時のメッセージにファイルパスが含まれることからもわかります。つまりこういうことです。
panic: hogehoge
goroutine 16 [running]:
runtime.panic(0x495080, 0xc208000170)
/usr/local/go/src/pkg/runtime/panic.c:279 +0xf5
main.main()
/home/umisama/go/src/github.com/umisama/hogehoge/main.go:7 +0xf3
実行ファイルを開けてみると、確かにファイルのフルパスが入っていることがわかります。
これはgolangでオンプレ開発をやるに当たって障害になり得ます。(いや、今の現場は困らないんですが)
問題点は2つあります。
- panic時に使用者の目に触れる形でビルド環境のパスが出ること
- そもそもバイナリにパスが含まれていること
対処方法
最初にも書いたように、対処方法は無いです。これはフォーラムのissueにも上がっているのですが、runtime.Callとの問題があって簡単には治らなさそう。
とりあえず、「使用者に見えないようにする」ためにはgcflagに"-trimpath"を渡してあげて
$ go build -gcflags="-trimpath=/home/umisama" main.go
$ ./main
panic: hogehoge
goroutine 16 [running]:
runtime.panic(0x495080, 0xc208000170)
/usr/local/go/src/pkg/runtime/panic.c:279 +0xf5
main.main()
hogehoge/main.go:7 +0xf3
goroutine 19 [finalizer wait]:
runtime.park(0x412d10, 0x544410, 0x542f69)
/usr/local/go/src/pkg/runtime/proc.c:1369 +0x89
runtime.parkunlock(0x544410, 0x542f69)
/usr/local/go/src/pkg/runtime/proc.c:1385 +0x3b
runfinq()
/usr/local/go/src/pkg/runtime/mgc0.c:2644 +0xcf
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445
という風に、表示から除くコトはできます。
ただバイナリの中には同じくパスが残っているので、あんまり解決になってないですね。残念。