内容简介:反射不仅可以获取值的类型信息,还可操作变量的值。使用获取值的操作支持很多,对应的数据类型都支持。例如
1 概述
反射不仅可以获取值的类型信息,还可操作变量的值。使用 reflect.Value 类型操作变量的值。
2 值反射对象
reflect.ValueOf() 方法可以获取一个值的反射对象,之后可以获取值的相关信息,或者获取这个值。示例:
v := make([]int, 10) valueV := reflect.ValueOf(v) fmt.Println(valueV.IsValid()) // true fmt.Println(valueV.IsNil()) // false fmt.Println(valueV.Interface().([]int)) // [0 0 0 0 0 0 0 0 0 0] fmt.Println(valueV.Slice(0, valueV.Len())) // [0 0 0 0 0 0 0 0 0 0]
-
.IsValid()和.IsNil(),是获取值的信息,判断是否合法和是否为Nil。 -
.Interface().([]int),利用类型断言获取原始值。 -
.Slice(0, valueV.Len()),通过类型获取原始值。
获取值的操作支持很多,对应的数据类型都支持。例如 func (v Value) Int() int64 , func (v Value) Float() float64 , func (v Value) String() string 等。
3 修改值
利用反射可以完成值的修改, func (v Value) Elem() Value 方法获取值反射对应的元素,再利用 类setType 方法完成设置,示例:
v := 42 valueV := reflect.ValueOf(&v) valueV.Elem().SetInt(1024) fmt.Println(v) // 1024
注意,修改值需要满足可被寻址的要求,因此我们使用的是 reflect.ValueOf(&v) 。
4 修改结构体字段值
反射修改结构体字段,需要先获取结构体的值反射对象,再去确定字段,再去修改。演示为:
s := &Stu{
"Hank",
}
valueS := reflect.ValueOf(s)
valueS.Elem().FieldByName("Name").SetString("Kang")
fmt.Println(s.Name) // Kang
注意,修改结构体字段时,要保证字段能被导出,首字母大写。
完! 原文出自: 小韩说课 微信关注:小韩说课
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
复杂网络理论及其应用
汪小帆、李翔、陈关荣 / 清华大学出版社 / 2006 / 45.00元
国内首部复杂网络专著 【图书目录】 第1章 引论 1.1 引言 1.2 复杂网络研究简史 1.3 基本概念 1.4 本书内容简介 参考文献 第2章 网络拓扑基本模型及其性质 2.1 引言 2.2 规则网络 2.3 随机图 2.4 小世界网络模型 2.5 无标度网络模型 ......一起来看看 《复杂网络理论及其应用》 这本书的介绍吧!