4 回答
TA贡献1777条经验 获得超10个赞
如果切片的长度大于 2,则可以对其进行重新切片。如果没有,则无需重新切片,只需在赋值中使用切片本身即可自动满足您的需求:结果最多有 2 个元素。
您甚至可以“保留”以下else分支if:
foo := bar
if len(foo) > 2 {
foo = foo[:2]
}
笔记:
切片是引用类型。因此,即使您曾经barinitialize foo,如果您之后修改foo 变量(不是切片的元素),也不会影响bar(分配时复制引用值):
bar := []int{0, 1, 2, 3}
foo := bar
if len(foo) > 2 {
foo = foo[:2]
}
fmt.Println(foo) // Here foo is [0, 1] as expected
foo = foo[:1] // Reslicing foo
fmt.Println(bar) // Bar is unaffected, bar = [0 1 2 3]
输出(在Go Playground上试试):
[0 1]
[0 1 2 3]
TA贡献1906条经验 获得超3个赞
只需使用一个if. 它更具可读性和性能,因为int和之间没有转换float64。
var foo []int
if len(bar) > 1 {
foo = bar[:2]
} else {
foo = bar[:len(bar)]
}
TA贡献1993条经验 获得超5个赞
Go 没有math.MinInt. 但是实现一个非常简单:
func Min(x, y int) int {
if x < y {
return x
}
return y
}
...
foo := bar[:Min(len(bar), 2)]
- 4 回答
- 0 关注
- 203 浏览
添加回答
举报