golang的反射机制(二)

3 篇文章 0 订阅
3 篇文章 0 订阅

golang的反射机制(二)

通过反射修改对象的值

1、反射的指针实例

package main

import (
	"fmt"
	"reflect"
)

func main() {
	var num float64=1.23

	//需要操作指针
	//通过reflect.ValueOf(),获取num的Value对象
	pointer:=reflect.ValueOf(&num)//注意参数必须是指针才能改其值
	newValue:=pointer.Elem()
	fmt.Println("Type:",newValue.Type()) //float64
	fmt.Println("是否可以修改数据:",newValue.CanSet())  //true

	//重新赋值
	newValue.SetFloat(3.14)
	fmt.Println(num)  //3.14

	//如果reflect.ValueOf()的参数不是指针
	value:=reflect.ValueOf(num)
	//value.SetFloat(6.66)  //panic: reflect: reflect.Value.SetFloat using unaddressable value
	fmt.Println(value.CanSet())  //false
}

2、反射的对象实例

package main

import (
	"fmt"
	"reflect"
)

type Student struct {
	Name string
	Age int
	School string
}
func main() {
	s1:=Student{"李四",20,"北大"}
	//通过反射,更改对象的数值,前提是数据可以被更改
	value:=reflect.ValueOf(&s1)
	if value.Kind() == reflect.Ptr{
		newValue:=value.Elem()
		fmt.Println(newValue.CanSet())  //true
		//通过获取字段对其值进行修改
		f1:=newValue.FieldByName("School")
		f1.SetString("清华")
		fmt.Println(s1)  //{李四 20 清华}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值