Go语言从interface获取数组/切片指定下标中结构体的某一字段

主要通过反射进行实现,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

你可能感兴趣的:(go)