Golang 反射牛刀小试

一、引言

       在学习 Java 时,反射一直是个重点掌握内容,ORM 等框架的实现更是与反射息息相关;

       Go 语言同样提供了对反射的支持,json 序列化库就是基于反射来工作的;

       基于反射,我们不仅能够获得变量的类型信息,而且能够动态修改变量内部的字段值。

二、反射的使用

       我们就使用简单的代码,最快地验证下反射功能

package main

import (
	"reflect"
	"fmt"
)

type Student struct {
	Name string
	Age  int
}

func main() {
	student := Student{"xiaoming", 5}
	fmt.Println("Check origin value:")
	fmt.Println("\t", student)

	v := reflect.ValueOf(&student)
	t := v.Type() // 也可以使用 t := reflect.TypeOf(&student)

	// 打印 student 的所有属性名称和类型(获取属性信息)
	fmt.Println("Get fields:")
	for i := 0; i < t.Elem().NumField(); i++ {
		field := t.Elem().Field(i)
		fmt.Println("\t", field.Name, field.Type)
	}

	// 设置 age 为 10 (修改属性值)
	v.Elem().FieldByName("Age").SetInt(10)
	fmt.Println("Check new value:")
	fmt.Println("\t", student)

	// 将反射 Value 对象还原为原变量
	ss := v.Interface()
	fmt.Println("Change to origin variable:")
	fmt.Println("\t", ss)
}

       

         以上就是 go 反射的基本使用方法了!

         附上反射转换关系图一张:

         

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值