Я собираюсь предложить способ вернуть логическое значение, основанное на передаче аргумента отражения Kinds локальному получателю типа (потому что я не мог найти ничего подобного).
Во-первых,мы объявляем наш анонимный тип типа refle.Value:
type AnonymousType reflect.Value
Затем мы добавляем конструктор для нашего локального типа AnonymousType, который может принимать любой потенциальный тип (в качестве интерфейса):
func ToAnonymousType(obj interface{}) AnonymousType {
return AnonymousType(reflect.ValueOf(obj))
}
Затем мы добавляем функцию для нашей структуры AnonymousType, которая утверждает против отражения. Вид:
func (a AnonymousType) IsA(typeToAssert reflect.Kind) bool {
return typeToAssert == reflect.Value(a).Kind()
}
Это позволяет нам вызывать следующее:
var f float64 = 3.4
anon := ToAnonymousType(f)
if anon.IsA(reflect.String) {
fmt.Println("Its A String!")
} else if anon.IsA(reflect.Float32) {
fmt.Println("Its A Float32!")
} else if anon.IsA(reflect.Float64) {
fmt.Println("Its A Float64!")
} else {
fmt.Println("Failed")
}
Может видеть больше,рабочая версия здесь: https://play.golang.org/p/EIAp0z62B7