Go 的原生數(shù)據(jù)類(lèi)型可以分為基本類(lèi)型和高級(jí)類(lèi)型,基本類(lèi)型主要包含 string, bool, int 及 float 系列,高級(jí)類(lèi)型包含 struct,array/slice,map,chan, func 。
在沈河等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需策劃設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營(yíng)銷(xiāo)型網(wǎng)站,成都外貿(mào)網(wǎng)站建設(shè),沈河網(wǎng)站建設(shè)費(fèi)用合理。相比 Java,Python,Javascript 等引用類(lèi)型的語(yǔ)言,Golang 擁有類(lèi)似C語(yǔ)言的指針這個(gè)相對(duì)古老的特性。但不同于 C 語(yǔ)言,Golang 的指針是單獨(dú)的類(lèi)型,而不是 C 語(yǔ)言中的 int 類(lèi)型,而且也不能對(duì)指針做整數(shù)運(yùn)算。從這一點(diǎn)看,Golang 的指針基本就是一種引用。
那么 Golang 為什么需要指針?這種指針又能有什么獨(dú)特的用途呢?
在學(xué)習(xí)引用類(lèi)型語(yǔ)言的時(shí)候,總是要先搞清楚,當(dāng)給一個(gè)函數(shù)/方法傳參的時(shí)候,傳進(jìn)去的是值還是引用。實(shí)際上,在大部分引用型語(yǔ)言里,參數(shù)為基本類(lèi)型時(shí),傳進(jìn)去的大都是值,也就是另外復(fù)制了一份參數(shù)到當(dāng)前的函數(shù)調(diào)用棧。參數(shù)為高級(jí)類(lèi)型時(shí),傳進(jìn)去的基本都是引用。這個(gè)主要是因?yàn)樘摂M機(jī)的內(nèi)存管理導(dǎo)致的。
內(nèi)存管理中的內(nèi)存區(qū)域一般包括 heap 和 stack, stack 主要用來(lái)存儲(chǔ)當(dāng)前調(diào)用棧用到的簡(jiǎn)單類(lèi)型數(shù)據(jù):string,boolean,int,float 等。這些類(lèi)型的內(nèi)存占用小,容易回收,基本上它們的值和指針占用的空間差不多,因此可以直接復(fù)制,GC也比較容易做針對(duì)性的優(yōu)化。 復(fù)雜的高級(jí)類(lèi)型占用的內(nèi)存往往相對(duì)較大,存儲(chǔ)在 heap 中,GC 回收頻率相對(duì)較低,代價(jià)也較大,因此傳引用/指針可以避免進(jìn)行成本較高的復(fù)制操作,并且節(jié)省內(nèi)存,提高程序運(yùn)行效率。
因此,在下列情況可以考慮使用指針:1,需要改變參數(shù)的值;2,避免復(fù)制操作;3,節(jié)省內(nèi)存;
變量是一種使用方便的占位符,用于引用計(jì)算機(jī)地址,而在 Go 語(yǔ)言中可以通過(guò) & 符號(hào)獲取一個(gè)變量在計(jì)算機(jī)中對(duì)應(yīng)的內(nèi)存地址。
package basic import "fmt" func main(){ a := 1 fmt.Println(&a) // 0xc4200180a0 }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。