..
Go 1.22的新功能 Cmp.Or
一、介绍
截至撰写本文时, Go 1.22已经发布几个月了。
Go 1.22提出并实现的最终函数是cmp.Or
。
首先我们看一下代码:
// Or returns the first of its arguments that is not equal to the zero value.
// If no argument is non-zero, it returns the zero value.
func Or[T comparable](vals ...T) T {
var zero T
for _, val := range vals {
if val != zero {
return val
}
}
return zero
}
它非常简短。它只是比较其参数并返回第一个不是
0
ornil
or""
或其类型的零值的参数。
二、如何使用它?
主要用途cmp.Or
是获取数字并返回第一个非0数字。例如,一个 API 获取列表页中的 page
和 pageSize
参数值, 给一些默认值。
它也适用于字符串和指针。
以下是我的真实代码库中的一些实际用途:
query.Event.WithContext(l.ctx).
Limit(cmp.Or(in.PageSize, 20)).
Offset((cmp.Or(in.Page, 1) - 1) * cmp.Or(in.PageSize, 20)).
Order(query.Event.ID.Desc()).
Scan(&events)
上面例子就是 Page 和 PageSize 都为 0 时, 默认赋值默认值。