func NameOf(v reflect.Value) string {
	fnc := runtime.FuncForPC(v.Pointer())
	if fnc == nil {
		return "<unknown>"
	}
	fullName := fnc.Name() // e.g., "long/path/name/mypkg.(*MyType).(long/path/name/mypkg.myMethod)-fm"

	// Method closures have a "-fm" suffix.
	fullName = strings.TrimSuffix(fullName, "-fm")

	var name string
	for len(fullName) > 0 {
		inParen := strings.HasSuffix(fullName, ")")
		fullName = strings.TrimSuffix(fullName, ")")

		s := lastIdentRx.FindString(fullName)
		if s == "" {
			break
		}
		name = s + "." + name
		fullName = strings.TrimSuffix(fullName, s)

		if i := strings.LastIndexByte(fullName, '('); inParen && i >= 0 {
			fullName = fullName[:i]
		}
		fullName = strings.TrimSuffix(fullName, ".")
	}
	return strings.TrimSuffix(name, ".")
}
func NameOf(v reflect.Value) string {
	fnc := runtime.FuncForPC(v.Pointer())
	if fnc == nil {
		return "<unknown>"
	}
	fullName := fnc.Name() 

	
	fullName = strings.TrimSuffix(fullName, "-fm")

	var name string
	for len(fullName) > 0 {
		inParen := strings.HasSuffix(fullName, ")")
		fullName = strings.TrimSuffix(fullName, ")")

		s := lastIdentRx.FindString(fullName)
		if s == "" {
			break
		}
		name = s + "." + name
		fullName = strings.TrimSuffix(fullName, s)

		if i := strings.LastIndexByte(fullName, '('); inParen && i >= 0 {
			fullName = fullName[:i]
		}
		fullName = strings.TrimSuffix(fullName, ".")
	}
	return strings.TrimSuffix(name, ".")
}
func NameOf ( v reflect . Value ) string { fnc := runtime . FuncForPC ( v . Pointer ( ) ) if fnc == nil { return " " } fullName := fnc . Name ( ) // e.g., "long/path/name/mypkg.(*MyType).(long/path/name/mypkg.myMethod)-fm" // Method closures have a "-fm" suffix. fullName = strings . TrimSuffix ( fullName , " " ) var name string for len ( fullName ) > 0 { inParen := strings . HasSuffix ( fullName , " " ) fullName = strings . TrimSuffix ( fullName , " " ) s := lastIdentRx . FindString ( fullName ) if s == " " { break } name = s + " " + name fullName = strings . TrimSuffix ( fullName , s ) if i := strings . LastIndexByte ( fullName , '(' ) ; inParen && i >= 0 { fullName = fullName [ : i ] } fullName = strings . TrimSuffix ( fullName , " " ) } return strings . TrimSuffix ( name , " " ) }
// NameOf returns the name of the function value.
NameOf returns the name of the function value .