func RealType(t interface{}) (ty reflect.Type) {
	ty = nil
	v := reflect.ValueOf(t)
	if !v.IsNil() {
		if v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface {
			for {
				v = v.Elem()
				if (v.Kind() != reflect.Ptr && v.Kind() != reflect.Interface) || v.IsNil() {
					break
				}
			}
		}
	}
	ty = v.Type()
	return
}
return the final type of t (non-pointer, non-interface)
todo test it
package skit
import (
	"errors"
	"reflect"
	"unsafe"
)
func IsNil(any interface{}) bool {
	re := true
	if any != nil {
		v := reflect.ValueOf(any)
		switch v.Kind() {
		case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.UnsafePointer, reflect.Interface, reflect.Slice:
			re = v.IsNil()
		default:
			re = false
			return re
		}
		if !re {
			for v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface {  
				v = v.Elem()  
				switch v.Kind() {
				case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.UnsafePointer, reflect.Interface, reflect.Slice:
					re = v.IsNil()
				default:
					re = false
					return re
				}
				if re {
					break
				}
			}
		}
	}
	return re
}