检查reflect.Kind()切片的 时,如果未存储在指针内,reflect则正确将其识别为 a :slicepackage mainimport ( "fmt" "reflect")type Dog struct { Name string Age int}func main() { var dogs []Dog rDogs := reflect.ValueOf(dogs) fmt.Println(rDogs.Kind())}输出:slice但是,当切片存储在指针内时,reflect.Kind()将其标识为struct:package mainimport ( "fmt" "reflect")type Dog struct { Name string Age int}func main() { dogs1 := make([]Dog, 0) pointer := &dogs1 printPointerValueKind(pointer) var dogs2 []Dog pointer = &dogs2 printPointerValueKind(pointer)}func printPointerValueKind(pointer interface{}) { if pointer != nil { rPointer := reflect.ValueOf(pointer) if rPointer.Kind() == reflect.Ptr { value := rPointer.Elem() rValue := reflect.ValueOf(value) fmt.Println(rValue.Kind()) } }} 输出:structstruct我的问题是:为什么会出现这种情况?有没有一种方法可以将切片存储在指针内,并且仍然将reflect.Kind()其标识为 a slice?
1 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
1 . (reflect.Value).Elem()
返回 a reflect.Value
,它是一个结构体,如果您正在查找该值所持有的类型,则不需要再次传递给它。reflect.ValueOf
2 . rPointer.Elem().Kind()
应该足以满足你的需要。
- 1 回答
- 0 关注
- 136 浏览
添加回答
举报
0/150
提交
取消