package main
import (
"fmt""reflect"
)
func main() {
var x float64 = 3.4
v := reflect.ValueOf(x)
fmt.Println("type:", v.Type())
fmt.Println("kind is float64:", v.Kind() == reflect.Float64)
fmt.Println("value:", v.Float())
}
从反射对象到接口值
package main
import (
"fmt""reflect"
)
func main() {
var x float64 = 3.4
v := reflect.ValueOf(x)
fmt.Println(v.Interface())
}
只能修改值是settable的反射对象的值
package main
import (
"fmt""reflect"
)
func main() {
var x float64 = 3.4
p := reflect.ValueOf(&x) // Note: take the address of x.
fmt.Println("type of p:", p.Type())
fmt.Println("settability of p:", p.CanSet())
v :=p.Elem()//Elem 返回指针p指向的值
fmt.Println("settability of v:", v.CanSet())
v.SetFloat(7.1)
fmt.Println(v.Interface())
fmt.Println(x)//now original x is changed
}