Go语言反射之值反射
生活随笔
收集整理的這篇文章主要介紹了
Go语言反射之值反射
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 概述
反射不僅可以獲取值的類型信息,還可操作變量的值。使用 reflect.Value 類型操作變量的值。
2 值反射對象
reflect.ValueOf() 方法可以獲取一個值的反射對象,之后可以獲取值的相關信息,或者獲取這個值。示例:
v := make([]int, 10)valueV := reflect.ValueOf(v)fmt.Println(valueV.IsValid()) // truefmt.Println(valueV.IsNil()) // falsefmt.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注意,修改結構體字段時,要保證字段能被導出,首字母大寫。
完!
原文出自:小韓說課
微信關注:小韓說課
轉載于:https://www.cnblogs.com/hanzk/p/9922608.html
總結
以上是生活随笔為你收集整理的Go语言反射之值反射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue-cli3.0相关的坑
- 下一篇: springboot系列四、配置模板引擎