Go語言應(yīng)該什么情況使用指針_第1頁
Go語言應(yīng)該什么情況使用指針_第2頁
Go語言應(yīng)該什么情況使用指針_第3頁
Go語言應(yīng)該什么情況使用指針_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第Go語言應(yīng)該什么情況使用指針指針變量是一個變量,這個變量的值是指針(內(nèi)存地址)!

指針變量是一個變量,這個變量的值是指針(內(nèi)存地址)!

指針變量是一個變量,這個變量的值是指針(內(nèi)存地址)!

獲取指針指向的值:

只需要在指針變量錢加*號即可獲得指針變量值所對應(yīng)的數(shù)據(jù):

nameV:=*nameP

fmt.Println("nameP指針指向的值為:",nameV)//nameP指針指向的值為:微客鳥窩

修改指針指向的值:

*nameP=""http://修改指針指向的值

fmt.Println("nameP指針指向的值為:",*nameP)

fmt.Println("name變量的值為:",name)

//運行結(jié)果:

//nameP指針指向的值為:

//name變量的值為:

我們發(fā)現(xiàn)nameP指針指向的值被改變了,變量name的值也被改變了

因為變量name存儲數(shù)據(jù)的內(nèi)存就是指針nameP指向的內(nèi)存,這塊內(nèi)存被nameP修改后,變量name的值也被修改了。

通過var關(guān)鍵字直接定義的指針變量是不能進行賦值操作的,因為它的值為nil,也就是還沒有指向的內(nèi)存地址

//錯誤示例

varintP*int

*intP=10//錯誤,應(yīng)該先給分配一塊內(nèi)存,內(nèi)存地址作為變量intP的值,這個內(nèi)存就可以存放10了。

//應(yīng)該使用

varintP*int//聲明int類型的指針變量intP

intP=new(int)//給指針分配一塊內(nèi)存

*intP=66

fmt.Println(":::",intP)//:::0xc0000ac088

fmt.Println(*intP)//66

//簡短寫法

varintP:=new(int)

*intP=66

指針參數(shù)

當給一個函數(shù)使用指針作為參數(shù)的時候,就可以在函數(shù)中,通過形參改變實參的值:

funcmain(){

name:="無塵"

modify(name)

fmt.Println("name的值為:",name)

funcmodify(name*string){

*name="wucs"

//運行結(jié)果:

//name的值為:wucs

指針接收者

如果接收者類型是map、slice、channel這類引用類型,不使用指針;

如果需要修改接收者,那么需要使用指針;

如果接收者是比較大的類型,可以考慮使用指針,因為內(nèi)存拷貝廉價,所以效率高。

什么情況下使用指針

不要對map、slice、channel這類引用類型使用指針;

如果需要修改方法接收者內(nèi)部的數(shù)據(jù)或者狀態(tài)時,需要使用指針;

如果需要修改參數(shù)的值或者內(nèi)部數(shù)據(jù)時,也需要使用指針類型的參數(shù);

如果是比較大的結(jié)構(gòu)體,每次參數(shù)傳遞或者調(diào)用方法都要內(nèi)存拷貝,內(nèi)存占用多,這時候可以考慮使用指針;

像int、bool這樣的小數(shù)據(jù)類型沒必要使用指針;

如果需要并發(fā)安全,則盡可能地不要使用指針,使用指針一定要保證并發(fā)安全;

指針最好不要嵌套,也就是不要使用一個指向指針的指針,雖然Go語言允許這么做,但是這會使你的代碼變得異常復雜。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論