[Note: Go 1.7+ recommends using runtime.CallersFrames
instead of runtime.FuncForPC
; another answer has an updated example].
Package runtime is your friend here:
func trace() {
pc := make([]uintptr, 10) // at least 1 entry needed
runtime.Callers(2, pc)
f := runtime.FuncForPC(pc[0])
file, line := f.FileLine(pc[0])
fmt.Printf("%s:%d %s\n", file, line, f.Name())
}