reflect.value和reflect.Type
1、修改对应的值
如:
func S_s() {
i := 3
ipv := reflect.ValueOf(&i)
ipv.Elem().SetInt(4)
fmt.Println(i)
}
修改值得注意事项
2、type的使用
一些特殊的方法
3、Json和struct的转换
//字符串与结构体转换
func S_s() {
p := perSon{
Name: "wanb",
Age: 123,
}
//struct转为string
jsonB, err := json.Marshal(p)
if err == nil {
fmt.Println(string(jsonB))
} else {
fmt.Println(err)
}
//string转为struct
respJson := "{\"Name\":\"李四\",\"Age\":40}"
json.Unmarshal([]byte(respJson), &p)
fmt.Println(p)
}
4、反射调用方法
利用call
//反射调用方法
//反射调用方法
func RefDiao() {
p := perSon{Name: "wangj", Age: 12}
ptv := reflect.ValueOf(p)
k := ptv.Method(0) //或者使用mwthodByName()
//传递参数
args := []reflect.Value{reflect.ValueOf("使用")}
k.Call(args)
}
**注意事项:**
![在这里插入图片描述](https://img-blog.csdnimg.cn/870c8c11217642ee8ee8763cd50367d8.png)
例如:
```go
type perSon struct {
Name string `json:"name"`
Age int `json:"age"`
}
反射定律
- 任何接口值interface}都可反射出反射对象
- 反射对象也可还原为interface变量
- 要修改反射的对象,该值必须可设置,可寻址