@冒泡 的回答已经说的完全正确了,为什么还有那么多人强答胡说……
该方法我想用在数据库的model类,每个数据库的表会对应一个struct,方法的内容是一样的,如果每个struct都实现该方法有点重复了,所以想做个通用的,不知道有没有好的思路来解决这个问题
很怀疑你的 ModelToMap 还没写好,或者说你在这里用了 interface{} 做参数。
假设是后一种情况(func ModelToMap(m interface{}) map[string]interface{}),那么,参考标准库 sort.Slice 的做法吧。
func ModelsToMaps(fields ...string, func eachModel(int) (interface{}, error)) (ml []map[string]interface{}) {
for i := 0; ; i++ {
next, err := eachModel(i)
if err != nil { return } // end of loop
ml = append(ml, ModelToMap(next))
}
}
users := []*model.User{...}
mm := ModelsToMaps(fields, func(i int) (interface{}, error) {
if i >= len(users) { return nil, errors.New("finished"); }
return users[i], nil
})