go语言报错reflect: reflect.Value.SetInt using value obtained using unexported field 解决方法

GO交流群:874512552

在学习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)
}
发生了以下错误,

原因:

在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)
}
即可
--------------------- 
作者:Xiayan_ucas 
来源:CSDN 
原文:https://blog.csdn.net/Xiayan_ucas/article/details/80367812 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(go)