go語言課程 Go語言的切片的擴容的倍數(shù)有什么規(guī)律?
Go語言的切片的擴容的倍數(shù)有什么規(guī)律?關(guān)于 golang 中 slice 的擴容,通過閱讀源碼 runtime 中的 growslice,我們能得出如下規(guī)律:在老 slice 容量小于1024 的時候
Go語言的切片的擴容的倍數(shù)有什么規(guī)律?
關(guān)于 golang 中 slice 的擴容,通過閱讀源碼 runtime 中的 growslice,我們能得出如下規(guī)律:
在老 slice 容量小于1024 的時候,新 slice 的容量是老 slice 的2倍。超過 1024 后,網(wǎng)上一般認(rèn)為按 1.25 倍增長,通過源碼和實際驗證,我們發(fā)現(xiàn),擴容策略并不是簡單的擴為原切片容量的 2 倍或 1.25 倍,還有內(nèi)存對齊的操作。因此,規(guī)律是:擴容后的容量 >= 原容量的 2 倍或 1.25 倍。
Golang真的好用嗎?
最近剛剛寫完go,有點上癮.自己一直是javaer,做這塊有10年了,下面說說個人對這三門語言的理解.go語言,幾個鮮明的特性, 垃圾回收 跨平臺 并發(fā)完美支持 編譯迅速.
- 垃圾回收就不說了,java也有,這可以讓我們不用過度的關(guān)心內(nèi)存管理.
 - 跨平臺,java python 也有可以,但他們需要安裝對應(yīng)的支持庫.java jre環(huán)境 python2 python3 環(huán)境. 而go編譯出來的包,直接可用.
 - 并發(fā)支持,java 并發(fā)最小單元是線程,cpu切換是有代價,數(shù)量控制不好,出問題是頭疼的一個點.go是多了一個協(xié)程的概念,是用戶級的線程.可以任意切換,cpu沒有什么代價.可以很舒服的開發(fā)高并發(fā)應(yīng)用.就這個特性我覺得后面很多服務(wù)器的程序會傾向于go.
 - 編譯迅速,java也編譯也很快,但他是編譯器選擇性進(jìn)行編譯或進(jìn)行解釋執(zhí)行的,沒有可比性.python純解釋性語言.性能上解釋性語言是沒法跟編譯性語言相比的.go兼顧編譯性語言性能好的特點,編譯比c c 快太多了.非常惹人喜愛.
 
所以go優(yōu)點是很多,后面很多程序應(yīng)用都是會傾向于他,特別是他的協(xié)程概念,釋放了多核處理器的能力.未來我看好他的發(fā)展.當(dāng)然java有很完整的生態(tài),目前來說構(gòu)建大型的復(fù)雜系統(tǒng)還是少不了他,大數(shù)據(jù)這塊很多框架都是基于Java.python呢,在爬蟲,機器學(xué)習(xí),ai領(lǐng)域有很多成熟的框架庫,要是搞機器學(xué)習(xí),也還得學(xué)他.
精通golang語言是一種怎樣的體驗?
Golang主要用途: 處理日志、數(shù)據(jù)打包、分布式系統(tǒng)、Web應(yīng)用、API應(yīng)用等
精通Golang的體驗: 不知道是怎樣的體驗,因為我不曾精通
使用Golang的體驗: 快速的編譯速度, 統(tǒng)一的代碼風(fēng)格, 優(yōu)秀的標(biāo)準(zhǔn)庫, 靜態(tài)類型卻又像腳本語言那樣簡單靈活
為什么Go語言能夠流行起來?
方便炫技。
其實剛學(xué),就詳細(xì)看了slice,也就是切片。說真的,看了一下之后,覺得這玩意除了炫技之外,沒有什么實際意義,如果真需要,完全可以放在第三個擴展上面來做。主要是太危險。
這類東西,還是很危險的。因為底層共享數(shù)組,如果capacity需要擴容,就自動復(fù)制一個底層數(shù)組。否則就是共享。這個在實際使用中,腦子一走神,很容易出問題。需要考慮這個slice怎么用。
后來看了官網(wǎng)關(guān)于slice的幾個酷炫用法,覺得這么,你開幾個方法有什么問題嗎?但是這個東西性能高啊。而且寫的代碼很酷炫啊。