引入反射模块
//导入模块
import (
"fmt"
"reflect"
)
在函数中使用反射
func CallAll(v []interface{}) {
for _, r := range v {
fmt.Println(reflect.TypeOf(r))
fmt.Println(reflect.TypeOf(r).Kind())
}
}
在遍历中使用反射
//转换Dog和Cat结构为interface{}
anis := make([]interface{}, len(animals))
//anis[0] = animals[0].Speak()
//anis[1] = animals[1].Speak()
//遍历集合并给interface{}赋值
for k, v := range animals {
anis[k] = "convert to interface{} : " + v.Speak()
out_kind_type := fmt.Sprintf("Speak: 类型-> %v 种类-> %v", reflect.TypeOf(v.Speak), reflect.TypeOf(v.Speak).Kind())
fmt.Println(out_kind_type)
}
完整代码
package main //包名
//导入模块
import (
"fmt"
"reflect"
)
//接口定义
type Animal interface {
Speak() string //定义一个方法Speak返回类型是字符串
}
//定义