主要通过反射进行实现,go-expression,EL表达式获取数组和切片的下标数据也是通过该方式实现。
先定义一个struct
type Order struct {
name string
age int
}
定义一个场景,有一个test的字段,类型是interface{},接收一个Order对象的切片。现在是想获取Order切片下标为1的name的值。
orders := make([]Order, 2)
orders[0] = Order{
name: "lisi", age: 18}
orders[1] = Order{
name: "wang", age: 24}
var test interface{
}
test = orders
//获取orders切片下标为1的数据
index := reflect.ValueOf(test).Index(1)
//取得Order对象类型
orderType := index.Type()
//取得name属性
nameFile,_ := orderType.FieldByName("name")
//取得name的类型
nameType := nameFile.Type.Kind()
//取得name字段
name := index.FieldByName("name")
var nameValue interface{
}
switch nameType {
case reflect.String:
nameValue = name.String()
break
case reflect.Int:
nameValue = name.Int()
break
}
fmt.Println("name字段类型为:", nameType)
fmt.Println("name字段值为:", nameValue)
运行结果
name字段类型为: string
name字段值为: wang