reflect2.go 763 B

12345678910111213141516171819202122232425262728293031323334
  1. // reflect2.go
  2. package main
  3. import (
  4. "fmt"
  5. "reflect"
  6. )
  7. func main() {
  8. var x float64 = 3.4
  9. v := reflect.ValueOf(x)
  10. // setting a value:
  11. // v.SetFloat(3.1415) // Error: will panic: reflect.Value.SetFloat using unaddressable value
  12. fmt.Println("settability of v:", v.CanSet())
  13. v = reflect.ValueOf(&x) // Note: take the address of x.
  14. fmt.Println("type of v:", v.Type())
  15. fmt.Println("settability of v:", v.CanSet())
  16. v = v.Elem()
  17. fmt.Println("The Elem of v is: ", v)
  18. fmt.Println("settability of v:", v.CanSet())
  19. v.SetFloat(3.1415) // this works!
  20. fmt.Println(v.Interface())
  21. fmt.Println(v)
  22. }
  23. /* Output:
  24. settability of v: false
  25. type of v: *float64
  26. settability of v: false
  27. The Elem of v is: <float64 Value>
  28. settability of v: true
  29. 3.1415
  30. <float64 Value>
  31. */