go語(yǔ)言入門 Go語(yǔ)言的slice為什么有這樣的奇怪問(wèn)題呢?
Go語(yǔ)言的slice為什么有這樣的奇怪問(wèn)題呢?在閱讀了我添加的打印輸出后,我不知道問(wèn)題所有者是否理解為什么會(huì)這樣。第68行s加9后,s的存儲(chǔ)容量擴(kuò)大到4。此時(shí),s中只有三個(gè)整數(shù),也就是說(shuō),再加一個(gè)整數(shù)
Go語(yǔ)言的slice為什么有這樣的奇怪問(wèn)題呢?
在閱讀了我添加的打印輸出后,我不知道問(wèn)題所有者是否理解為什么會(huì)這樣。
第68行s加9后,s的存儲(chǔ)容量擴(kuò)大到4。此時(shí),s中只有三個(gè)整數(shù),也就是說(shuō),再加一個(gè)整數(shù)就不會(huì)展開(kāi)。如果沒(méi)有擴(kuò)展,則加法后生成的片的地址不會(huì)更改。第72行的輸出證實(shí)了這一點(diǎn)。但是,雖然擴(kuò)展的片具有相同的地址,但它們的長(zhǎng)度不同。S仍然包含三個(gè)整數(shù),而x已經(jīng)包含四個(gè)整數(shù)。在第75行中,當(dāng)附加s時(shí),我們說(shuō)s的存儲(chǔ)容量是4。目前,只有三個(gè)整數(shù),因此附加的數(shù)據(jù)將不會(huì)展開(kāi)。相反,數(shù)據(jù)將存儲(chǔ)在第四個(gè)成員的地址上。如果不擴(kuò)大,地址就不會(huì)改變,所以12個(gè)直接覆蓋11個(gè)。這就是為什么X和y最終是一樣的。
我不知道我的答案是否清楚。如果有什么不清楚的地方,請(qǐng)指正。
Go語(yǔ)言的切片的擴(kuò)容的倍數(shù)有什么規(guī)律?
關(guān)于golang中slice的擴(kuò)展,通過(guò)在源代碼運(yùn)行時(shí)讀取growslice,我們可以得到如下規(guī)則:
當(dāng)舊片的容量小于1024時(shí),新片的容量是舊片的兩倍。超過(guò)1024后,一般認(rèn)為在互聯(lián)網(wǎng)上增長(zhǎng)1.25倍。通過(guò)源代碼和實(shí)際驗(yàn)證,我們發(fā)現(xiàn)擴(kuò)展策略不是簡(jiǎn)單地?cái)U(kuò)展到原來(lái)片容量的2倍或1.25倍,而是內(nèi)存對(duì)齊的操作。因此,規(guī)則是:擴(kuò)容后的容量>=原容量的2倍或1.25倍。
如何學(xué)好golang語(yǔ)言并開(kāi)發(fā)一個(gè)web應(yīng)用?
如果你想學(xué)好golang并開(kāi)發(fā)一個(gè)web應(yīng)用程序,這并不難。您可以執(zhí)行以下步驟: