2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
個(gè)人理解,
golang中的切片跟數(shù)組是不通的類(lèi)型結(jié)構(gòu)。切片時(shí)指向底層數(shù)組的可變的struct。
而數(shù)組是不可變的。你通過(guò)[...]int{7,7}
這種定義的是不可變的數(shù)組,此時(shí)數(shù)組是無(wú)法像操作切片一樣進(jìn)行操作的。

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
m := [...]int{7: 7}[3:]
[3:]
這種操作只能作用在變量上, 即已經(jīng)存在內(nèi)存地址的數(shù)據(jù)上, 而 [...]int{7: 7}
在賦值給變量前本身地址是不確定的,需要提前賦值給變量,之后才可以使用 [3:]
這樣的操作。
其次這種騷操作看不到任何有意義的地方, 還會(huì)造成內(nèi)存浪費(fèi),[...]int{7: 7}
相創(chuàng)建8個(gè)長(zhǎng)度的數(shù)組,而[3:]
截取之后前三個(gè)元素你就沒(méi)有辦法再操作,嚴(yán)重浪費(fèi)內(nèi)存,導(dǎo)致內(nèi)存泄漏。
這種寫(xiě)法不符合 Go
的設(shè)計(jì), 不僅會(huì)造成內(nèi)存泄漏還會(huì)導(dǎo)致代碼不易維護(hù)和閱讀.
如果 [...]int{7:7}[3:]
語(yǔ)法正確, 那么下面拆分的代碼結(jié)果會(huì)是 [...]int{7:7}[3:]
的預(yù)期結(jié)果。
a := [...]int{7: 7} m := a[3:] fmt.Println(m)
但是有個(gè)更簡(jiǎn)單的創(chuàng)建 slice
的方法,它是簡(jiǎn)潔的,且不會(huì)造成內(nèi)存泄漏,m = []int{4: 7}
,其結(jié)果和上述代碼完全一致。
Go不需要很多語(yǔ)法糖,建議閱讀 go最佳實(shí)踐
- 2 回答
- 0 關(guān)注
- 534 瀏覽
添加回答
舉報(bào)