go 反射

interface中保存了实际对象的值和类型

func TypeOf(i interface{}) Type
func ValueOf(i interface{}) Value
Settability is determined by whether the reflection object holds the original item
	var x float64 = 3.4
	fmt.Println(reflect.ValueOf(x).CanSet())         //false
	fmt.Println(reflect.ValueOf(&x).CanSet())        //false
	fmt.Println(reflect.ValueOf(&x).Elem().CanSet()) //true

	reflect.ValueOf(&x).Elem().SetFloat(1.2)
	fmt.Println(x) //1.2

	//only exported fields of a struct are settable.
	type T struct {
		A int
		b string
	}
	t := T{A: 1}
	s := reflect.ValueOf(&t).Elem()
	fmt.Println(s.FieldByName("A").CanSet()) //true
	fmt.Println(s.FieldByName("b").CanSet()) //false
	s.FieldByName("A").SetInt(123)
	fmt.Println(t.A) //123

 

A value is addressable if it is an element of a slice, an element of an addressable array, a field of an addressable struct, or the result of dereferencing a pointer

 

 

参考: http://blog.golang.org/laws-of-reflection

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值