I would like to share the Golang’s build flag to remove the source path (GOPATH) from panic stack trace output. In production environments or commercial projects it is sometimes not ideal to display the source path because of privacy, security or other reasons.

Below is an example of a stack trace output that reveals the GOPATH location which is located inside the developer’s home directory. In this case /home/johnpili/go/

panic: Aw, snap
 goroutine 1 [running]:
 main.main()
         /home/johnpili/go/src/company.com/event-document-pusher/main.go:42 +0x3e

Building using flags with trimpath

The solution I found is to use build flags with -trimpath.

go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH

After posting this blog a reddit user commented that as of Go 1.13 -trimpath can be directly used. I tested and it worked flawlessly.

go build -trimpath

Stack trace output with trimmed-out source path

Using the said build flags the stack trace output looks like this:

panic: Aw, snap
 goroutine 1 [running]:
 main.main()
         src/company.com/event-document-pusher/main.go:42 +0x3e

I hope this post can help other fellow developer with similar requirement or situation. I recommend to further read Go compile packages and dependencies

References

https://github.com/golang/go/issues/13809

https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies