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  }