package main
import (
"fmt""reflect"
)
func main() {
var circle float64 = 6.28
fmt.Println("Reflect : circle.Value = ", reflect.ValueOf(circle))
fmt.Println("Reflect : circle.Type = ", reflect.TypeOf(circle))
}
反射类型对象转换为接口类型变量
这个其实是上面运算的逆过程,简单例子代码如下:
package main
import (
"fmt""reflect"
)
func main() {
var circle float64 = 6.28var icir interface{}
icir = circle
valueref := reflect.ValueOf(icir)
fmt.Println(valueref)
fmt.Println(valueref.Interface())
y := valueref.Interface().(float64)
fmt.Println(y)
}
用反射进行变量修改
利用反射修改变量时,首先需要使用CanSet函数确认变量是否是可修改的。简单代码示例如下:
package main
import (
"fmt""reflect"
)
func main() {
var circle float64 = 6.28
value := reflect.ValueOf(circle)
fmt.Println("Reflect : value = ", value)
fmt.Println("Settability of value : ", value.CanSet())
value2 := reflect.ValueOf(&circle)
fmt.Println("Settability of value : ", value2.CanSet())
value3 := value2.Elem()
fmt.Println("Settability of value : ", value3.CanSet())
value3.SetFloat(3.14)
fmt.Println("Value of value3: ", value3)
fmt.Println("value of circle: ", circle)
}