写点什么

GO 类型接口及反射间的转换

用户头像
superman
关注
发布于: 2020 年 10 月 19 日

反射取值,接口断言,类型转换,类型探测

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

}


用户头像

superman

关注

还未添加个人签名 2018.07.20 加入

还未添加个人简介

评论

发布
暂无评论
GO 类型接口及反射间的转换