func GetType(v interface{}) reflect.Type {
	if IsPointerType(v) {
		val := reflect.ValueOf(v)
		return val.Elem().Type()
	}
	return reflect.TypeOf(v)
}
GetType get type of pointer
package util
import (
	"fmt"
	"log"
	"reflect"
)
func PanicIfErr(err error) {
	if err != nil {
		panic(err)
	}
}
func PanicIfNil(obj interface{}, msg string) {
	if obj == nil {
		panic(fmt.Errorf("unhandled nil pointer : %s", msg))
	}
}
func RecoverPanic(handler func(e error)) {
	if r := recover(); r != nil {
		if handler != nil {
			handler(r.(error))
		}
	}
}
func HasError(err error) bool {
	return err != nil
}
func FailOnError(err error, msg string) {
	if err != nil {
		log.Fatalf("%s: %s", msg, err)
	}
}
func IsEmptyString(s string) bool {
	return s == ""
}
func HasString(s string) bool {
	return s != ""
}
func IsPointerType(v interface{}) bool {
	return reflect.ValueOf(v).Kind() == reflect.Ptr
}