goalng的反射基础

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变量
  • 要修改反射的对象,该值必须可设置,可寻址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值