我明白可以通过反射获取对象的值,然后使用类型断言来获取实际对象:
obj := new(User)
out := reflect.ValueOf(obj).Elem().Interface().(User)
fmt.Println(out == *obj) // true
但是如果我不知道对象的类型是 User
,我该如何进行类型断言?假设它在一个函数内,类似于:
func Foo(obj interface{}) bool {
// out := reflect.ValueOf(obj).Elem().Interface().( ... )
return out == *obj
}
func main() {
obj := new(User)
fmt.Println(Foo(obj))
}
在 Foo
函数中,你永远不会知道实际传递的对象类型是什么,那么如何完成类型断言?
reflect.New(reflect.TypeOf(obj)).Interface()
。 - joshlf