mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 05:11:49 +08:00
34 lines
795 B
Go
34 lines
795 B
Go
// reflect2.go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
)
|
|
|
|
func main() {
|
|
var x float64 = 3.4
|
|
v := reflect.ValueOf(x)
|
|
// setting a value:
|
|
// v.SetFloat(3.1415) // Error: will panic: reflect.Value.SetFloat using unaddressable value
|
|
fmt.Println("settability of v:", v.CanSet())
|
|
v = reflect.ValueOf(&x) // Note: take the address of x.
|
|
fmt.Println("type of v:", v.Type())
|
|
fmt.Println("settability of v:", v.CanSet())
|
|
v = v.Elem()
|
|
fmt.Println("The Elem of v is: ", v)
|
|
fmt.Println("settability of v:", v.CanSet())
|
|
v.SetFloat(3.1415) // this works!
|
|
fmt.Println(v.Interface())
|
|
fmt.Println(v)
|
|
}
|
|
/* Output:
|
|
settability of v: false
|
|
type of v: *float64
|
|
settability of v: false
|
|
The Elem of v is: <float64 Value>
|
|
settability of v: true
|
|
3.1415
|
|
<float64 Value>
|
|
*/
|