检查reflect.Kind()切片的 时,reflect正确地将其识别为slice未存储在指针中的时间:package 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()其标识为slice?
1 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
1 . (reflect.Value).Elem()
返回 a reflect.Value
,它是一个结构,如果您正在寻找值所持有的类型,则不需要再次传递给它。reflect.ValueOf
2 . rPointer.Elem().Kind()
应该足以满足您的需要。
- 1 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消