LoginSignup
23
20

More than 5 years have passed since last update.

golangの実行ファイルからファイルパスを除きたい

Posted at

先に言っておくと根本的な解決方法は無いです。

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

実行ファイルを開けてみると、確かにファイルのフルパスが入っていることがわかります。

Screenshot from 2014-06-30 12:07:19.png

これはgolangでオンプレ開発をやるに当たって障害になり得ます。(いや、今の現場は困らないんですが)
問題点は2つあります。

  1. panic時に使用者の目に触れる形でビルド環境のパスが出ること
  2. そもそもバイナリにパスが含まれていること

対処方法

最初にも書いたように、対処方法は無いです。これはフォーラムの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

という風に、表示から除くコトはできます。
ただバイナリの中には同じくパスが残っているので、あんまり解決になってないですね。残念。

23
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
20