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