@冒泡 的回答已经说的完全正确了,为什么还有那么多人强答胡说……

该方法我想用在数据库的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
})