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

Slice 的`reflect.Kind()` 存储在指针中时变成`Struct`

Slice 的`reflect.Kind()` 存储在指针中时变成`Struct`

Go
一只名叫tom的猫 2022-04-20 20:49:21
检查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()应该足以满足您的需要。


查看完整回答
反对 回复 2022-04-20
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

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