func arrayColumn(array interface{},key string)(result map[string]interface{},err error){
result = make(map[string]interface{})
t := reflect.TypeOf(array)
v := reflect.ValueOf(array)
if t.Kind() != reflect.Slice {
return nil, errors.New("array type not slice")
}
if v.Len() == 0{
return nil, errors.New("array len is zero")
}
for i := 0; i < v.Len(); i++{
indexv := v.Index(i)
if indexv.Type().Kind() != reflect.Struct{
return nil, errors.New("element type not struct")
}
mapKeyInterface := indexv.FieldByName(key)
if mapKeyInterface.Kind() == reflect.Invalid {
return nil,errors.New("key not exist")
}
mapKeyString, err := interfaceToString(mapKeyInterface.Interface())
if err != nil{
return nil, err
}
result[mapKeyString] = indexv.Interface()
}
return result,err
}
func interfaceToString(v interface{})(resu
golang 实现arrayColumn 将结构数组中结构内的某个字段作为map的key
最新推荐文章于 2023-02-11 20:22:31 发布