我已经知道如何获取函数名称和函数位置:
func Trace(str string) string {
pc := make([]uintptr, 10) // at least 1 entry needed
runtime.Callers(2, pc)
f := runtime.FuncForPC(pc[0])
file, line := f.FileLine(pc[0])
str = Replace(str, "\n", ` `)
return `-- ` + fmt.Sprintf("%s:%d %s:%s", file, line, f.Name() + str)
}
但是如何获取函数参数值?例如,如果我在{/ p>中调用Trace
函数
func Test1(a string, b int) {
Trace(`demo`)
}
func main() {
Test1(`aaaa`,123)
}
我想在aaaa
函数中获取值123
和Trace
,而不必手动将它们从Test1
传递到Trace
函数
答案 0 :(得分:0)
使用变量参数可能更好。怎么样?
package main
import (
"fmt"
"runtime"
)
func main() {
str := trace(`demo`, 123, "me")
fmt.Println(str)
}
func trace(str string, args ...interface{}) string {
pc := make([]uintptr, 10) // at least 1 entry needed
runtime.Callers(2, pc)
f := runtime.FuncForPC(pc[0])
file, line := f.FileLine(pc[0])
// str = Replace(str, "\n", ` `)
return `-- ` + fmt.Sprintf("%s:%d %s:%s (%v)", file, line, f.Name(), str, args)
}