GO 类型接口及反射间的转换
反射取值,接口断言,类型转换,类型探测
1 角色
具体值:5,"abc",结构体的值等
接口值:指向具体值的接口变量
---go 接口变量指向一个对象,接口变量不是对象的一个别名,而是一种包装(java 可认为是别名):具有其动态类型与动态值两个成员。
类型: int,string ,结构的类型 等
反射容器:reflect.Type reflect.Value
操作:
反射相关:反射包装与类型探测
reflect.TypeOf|Valueof --反射容器包装(reflect.Type, reflecct.Value
reflect.Value.Inferface() ,reflect.Value.type 反射值封装转接口与反射类型封装。
reflect.Value.Kind(): 底层类型探测。
接口与接口及值的转换-接口断言
i.(T) 接口断言
i.(type) -只能跟 switch 使用,探测接口类型。
类型间转换(具体值|接口转类型)-类型转换
具体类型(值|接口变量)
比如:
p--->byte[]
s:=string(p)
2 转换
2.1 具体值,接口值--->反射容器
reflect.TypeOf(接口值,具体值) =》得到 reflect.Type
reflect.ValueOf(接口值,具体值) =》得到 reflect.Value
reflect.Value.type -->具体类型对应的 refelect.Type
2.2 反射容器操作
reflect.Value-->接口值
reflect.Value.Interface() -->返回 interface -容器逆操作
reflect.Value.Kind()->返回底层基础类型。reflect.int,reflect.Chan,reflect.Fun,reflect.Array, reflect.Struct, reflect.Interface,reflect.Ptr, reflect.Slice, reflect.Map.
reflect.Value ,reflect.Type 有很多方法,根据其具体类型调用对应的方法可以取出里面的子成员等。
2.3 接口断言
1:接口值-->具体类型值|另一个接口值
接口断言:i 是个接口变量
p,ok :=i.(T) ,T 是具体类型或接口。
2:接口断言的特殊表达--类型探测 .(type) 只能与 switch 一起用
switch i.(type){
case T:
xxx
}
评论