引入反射模块

//导入模块
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返回类型是字符串
}

//定义