相关疑难解决方法(0)

v.Elem() 与 Indirect(v) 当传入一个 reflect.New(Type) 的结果时

我的问题与这里的这个问题有关:

golang - 反射包中的 Elem 与间接

基本上它声称下面的表达式为真,如果someXreflect.Value包含指针的 a

reflect.Indirect(reflect.ValueOf(someX)) === reflect.ValueOf(someX).Elem()
Run Code Online (Sandbox Code Playgroud)

如果是这样,那么为什么我下面的代码会在最后一行崩溃?

package main

import (
  "reflect"
  "log"
)

type Person struct {
  Name string

}

func main() {


newitem := reflect.New(reflect.ValueOf(Person{}).Type())

log.Println(reflect.TypeOf(newitem)) // shows reflect.Value
log.Println(newitem.Type().Kind()) // shows it is a ptr

log.Println(reflect.Indirect(reflect.ValueOf(newitem))) // this line does not cause panic
log.Println(reflect.ValueOf(newitem).Elem()) // this line causes panic

}
Run Code Online (Sandbox Code Playgroud)

我一直很难理解 Go 中的反射包,而且很可能我误解了 Go 语言的一些基本方面,如我过去一周一直在问的堆栈溢出问题中所指出的那样。

go go-reflect

2
推荐指数
1
解决办法
514
查看次数

标签 统计

go ×1

go-reflect ×1