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