panic: reflect: reflect.Value.SetInt using value obtained using unexported field 解决方法

在学习go编程,反射修改结构体属性的值时,示例

package main

import(
   "fmt"
   "reflect"
)

type People struct{
   age int
   name string
}

func main(){
   temp := People{age:20,name:"mark"}
   fmt.Println(temp.age)
   fmt.Println(temp.name)
   s := reflect.ValueOf(&temp).Elem()
   s.Field(0).SetInt(30)
   fmt.Println(s)
   fmt.Println(temp)
}
发生了以下错误,
panic: reflect: reflect.Value.SetInt using value obtained using unexported field 解决方法_第1张图片


原因:

在struct中的属性,严格区分首字母大小写,大写为公有属性,外面可以访问到,小写为私有,外面访问不到。

即修改为

package main

import(
   "fmt"
   "reflect"
)

type People struct{
   Age int
   Name string
}

func main(){
   temp := People{Age:20,Name:"mark"}
   fmt.Println(temp.Age)
   fmt.Println(temp.Name)
   s := reflect.ValueOf(&temp).Elem()
   s.Field(0).SetInt(30)
   fmt.Println(s)
   fmt.Println(temp)
}
即可

你可能感兴趣的:(go)