github.com/sandwich-go/boost@v1.3.29/xos/func.go (about) 1 package xos 2 3 import ( 4 "fmt" 5 "path/filepath" 6 "reflect" 7 "runtime" 8 "strings" 9 ) 10 11 // FuncFullNameUsingReflect 使用反射获取函数名 12 func FuncFullNameUsingReflect(f interface{}) (string, error) { 13 t := reflect.TypeOf(f).Kind() 14 if t != reflect.Func { 15 return "", fmt.Errorf("args must be func, now %v", t) 16 } 17 return runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name(), nil 18 } 19 20 // FuncBaseNameUsingReflect 使用反射获取基础函数名 21 func FuncBaseNameUsingReflect(f interface{}) (string, error) { 22 n, err := FuncFullNameUsingReflect(f) 23 if err != nil { 24 return "", err 25 } 26 ss := strings.Split(filepath.Base(n), ".") 27 return ss[len(ss)-1], nil 28 }