go可变参数传数组值

在https://github.com/qiniu/qmgo 中 有个方法是传排序参数,通常是一个或多个。

func (q *Query) Sort(fields ...string) QueryI {
	if len(fields) == 0 {
		// A nil bson.D will not correctly serialize, but this case is no-op
		// so an early return will do.
		return q
	}

	var sorts bson.D
	for _, field := range fields {
		key, n := SplitSortField(field)
		if key == "" {
			panic("Sort: empty field name")
		}
		sorts = append(sorts, bson.E{Key: key, Value: n})
	}
	newQ := q
	newQ.sort = sorts
	return newQ
}

若需传递多个fields, fields是个可变参数, 传值是你可能想支持多个,但对于参数个数也清楚, 那要先定义个字符串数组。

如下中的sort字段

type PageInfo struct {
	Page  int64    `json:"page" form:"page" binding:"gte=1"`
	Limit int64    `json:"limit" form:"limit" binding:"min=10,max=100"`
	Sort  []string `json:"sort[]" form:"sort[]"`
}

最终调用如下:

if err = col.Find(context.Background(), filter).
		Sort(pageInfo.Sort...).
		Limit(pageInfo.Limit).
		Skip((pageInfo.Page - 1) * pageInfo.Limit).
		All(&batch); err != nil {
		return nil, err
	}

在调用Sort方法时加上... 即可