先行者:我才刚刚开始接触 golang。
这可能被证明是一个愚蠢的问题,因为执行这些计算很容易,但我还是要问这个问题,因为我在谷歌搜索时没有找到答案。
是否有一个内置函数返回 int 参数的最小值:
func MinIntSlice(v []int) (m int) {
if len(v) > 0 {
m = v[0]
}
for i := 1; i < len(v); i++ {
if v[i] < m {
m = v[i]
}
}
return
}
或可变数量的 int 参数中的最小值:
func MinIntVarible(v1 int, vn ...int) (m int) {
m = v1
for i := 0; i < len(vn); i++ {
if vn[i] < m {
m = vn[i]
}
}
return
}
如果不是,最好的“约定”是简单地创建一个包含这样的助手的包吗?
原文由 Jesse 发布,翻译遵循 CC BY-SA 4.0 许可协议
没有内置的。
如果您只需要在一个包中使用此功能,您可以编写一个未导出的函数(例如
minIntSlice
)。如果您需要在多个包中使用此功能,您可以创建一个包并将类似的功能放在那里。您应该考虑将此包设为内部包 ( https://golang.org/s/go14internal )。
关于如何改进代码的一些建议:
MinIntSlice
将为空切片返回 0。但是 0 也是一个有效的最小元素。我认为在空切片上调用 panic 是更好的选择。使用范围循环:
通过不给出值的索引,它将为您提供最小值 0,这可能不存在于给定值中,因此您还必须对索引应用条件。