Golang 反射牛刀小试 - Go语言中文社区

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 反射的基本使用方法了!

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

         

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/shida_csdn/article/details/88050459
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-09-04 15:05:01
  • 阅读 ( 915 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢