为了账号安全,请及时绑定邮箱和手机立即绑定

当存储在指针内时,切片的“reflect.Kind()”变为“Struct”

当存储在指针内时,切片的“reflect.Kind()”变为“Struct”

Go
qq_花开花谢_0 2023-08-07 18:59:03
检查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()应该足以满足你的需要。


查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信