複数箇所にデバッグ用のログを仕込むにあたって、呼び出し元を勝手に挿入してくれると助かるので方法を調べた。

https://stackoverflow.com/questions/25927660/how-to-get-the-current-function-name

runtime.CallersFrames を使って呼び出し元を特定できる。 具体的には以下のようにする。

func trace(msg string) {
	pc := make([]uintptr, 15)
	n := runtime.Callers(2, pc)
	frames := runtime.CallersFrames(pc[:n])
	frame, _ := frames.Next()
	fmt.Printf("[%s:%d %s] %s\n", frame.File, frame.Line, frame.Function, msg)
}