4 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果切片的長(zhǎng)度大于 2,則可以對(duì)其進(jìn)行重新切片。如果沒有,則無需重新切片,只需在賦值中使用切片本身即可自動(dòng)滿足您的需求:結(jié)果最多有 2 個(gè)元素。
您甚至可以“保留”以下else分支if:
foo := bar
if len(foo) > 2 {
foo = foo[:2]
}
筆記:
切片是引用類型。因此,即使您曾經(jīng)barinitialize foo,如果您之后修改foo 變量(不是切片的元素),也不會(huì)影響bar(分配時(shí)復(fù)制引用值):
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貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
只需使用一個(gè)if. 它更具可讀性和性能,因?yàn)閕nt和之間沒有轉(zhuǎn)換float64。
var foo []int
if len(bar) > 1 {
foo = bar[:2]
} else {
foo = bar[:len(bar)]
}

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
Go 沒有math.MinInt. 但是實(shí)現(xiàn)一個(gè)非常簡(jiǎn)單:
func Min(x, y int) int {
if x < y {
return x
}
return y
}
...
foo := bar[:Min(len(bar), 2)]
- 4 回答
- 0 關(guān)注
- 257 瀏覽
添加回答
舉報(bào)