Мой вопрос связан с этим вопросом здесь:
golang - Elem Vs Indirect в отражающей упаковке
В основном он утверждает, что приведенное ниже выражение является истинным, если someX
является reflect.Value
, который содержит указатель
reflect.Indirect(reflect.ValueOf(someX)) === reflect.ValueOf(someX).Elem()
Если это так, то почему мой код ниже вылетает на последней строке?
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
}
Мне было трудно понять пакет отражения в Go, и, вероятно, я неправильно понял некоторые фундаментальные аспекты языка Go, обозначенные в вопросах переполнения стека, которые я задавал на прошлой неделе.