Go语言反射修改变量

Go语言反射修改变量教程

Golang 中,通过 反射 我们可以修改 变量 的值。在修改变量的值之前,最好使用 CanSet 方法获取是否可以修改该变量的值。

通过反射修改变量的值,有两种方法,一种是使用 Set 方法,一种是使用 SetXXX() 方法,比如 SetString()、SetInt() 等。

Go语言反射修改变量

语法

reflect.ValueOf(&x).Elem().Set()

说明

使用 reflect.ValueOf 传入我们要获取的变量的地址,并且使用 Elem 获取指针信息,接着,调用 Set 方法修改变量的值。

其中,Set 方法接受的 参数 是一个 reflect.ValueOf 函数返回值

Go语言反射修改变量

语法

reflect.ValueOf(&x).Elem().SetXXX()

说明

使用 reflect.ValueOf 传入我们要获取的变量的地址,并且使用 Elem 获取指针信息,接着,调用 SetXXX 方法修改变量的值。

案例

Go语言反射修改变量

通过反射的 SetXXX 方法修改变量的值

package main import ( "fmt" "reflect" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") var x = 1024 var str = "HaiCoder" xValue := reflect.ValueOf(&x).Elem() strValue := reflect.ValueOf(&str).Elem() if xValue.CanSet(){ xValue.SetInt(10240) fmt.Println("New xValue =", xValue) } if strValue.CanSet(){ strValue.SetString("haicoder") fmt.Println("New strValue =", strValue) } }

程序运行后,控制台输出如下:

17_golang反射Value修改变量.png

首先,我们定义了一个 int 类型 的变量 x 和一个 字符串 类型的变量 str,接着,我们使用 reflect.ValueOf 获取这三个变量的值信息,同时,使用 Elem 获取指针所指向的对象。

最后,我们使用 CanSet 方法判断,指针指向的对象是否可以被修改,如果可以被修改,那么再使用 SetXX 方法修改变量的值。

我们要修改变量的值,那么必须在 reflect.ValueOf 传入变量的地址,而不能传入变量的值。

Go语言反射修改变量

通过反射的 Set 方法修改变量的值

package main import ( "fmt" "reflect" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") var x = 1024 var str = "HaiCoder" xValue := reflect.ValueOf(&x).Elem() strValue := reflect.ValueOf(&str).Elem() newXValue := reflect.ValueOf(20140) newStrValue := reflect.ValueOf("haicoder") if xValue.CanSet(){ xValue.Set(newXValue) fmt.Println("New xValue =", xValue) } if strValue.CanSet(){ strValue.Set(newStrValue) fmt.Println("New strValue =", strValue) } }

程序运行后,控制台输出如下:

18_golang反射Value修改变量.png

我们通过 reflect.ValueOf 分别获取两个新的变量的值,接着,使用 Set 方法,即可通过反射设置变量的新的值。

Go语言反射修改变量总结

通过反射修改变量的值,有两种方法,一种是使用 Set 方法,一种是使用 SetXXX() 方法,比如 SetString()、SetInt() 等。Go 语言反射修改变量语法:

reflect.ValueOf(&x).Elem().Set()

Go 语言反射修改变量语法:

reflect.ValueOf(&x).Elem().SetXXX()