如果我将接口(interface)传递给函数,有没有办法判断传入的项是结构还是指向结构的指针?我写了这个愚蠢的测试来说明我需要弄清楚什么。
type MyStruct struct {
Value string
}
func TestInterfaceIsOrIsntPointer(t *testing.T) {
var myStruct interface{} = MyStruct{Value: "hello1"}
var myPointerToStruct interface{} = &MyStruct{Value: "hello1"}
// the IsPointer method doesn't exist on interface, but I need something like this
if myStruct.IsPointer() || !myPointerToStruct.IsPointer() {
t.Fatal("expected myStruct to not be pointer and myPointerToStruct to be a pointer")
}
}
最佳答案
func isStruct(i interface{}) bool {
return reflect.ValueOf(i).Type().Kind() == reflect.Struct
}
您可以根据需要通过更改类型进行测试,例如reflect.Ptr
。在确保它是一个指针后,您甚至可以使用 reflect.Indirect(reflect.ValueOf(i))
获取指向的值。
添加:
似乎 reflect.Value
有一个 Kind
方法,所以 reflect.ValueOf(i).Kind()
就足够了。
关于go - 我如何判断我的 interface{} 是否是一个指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31285493/