golang-變量,值類型與引用類型

變量

Go中使用全新的關鍵字var來聲明變量,屬於強類型,在聲明變量後就不允許改變其數據類型。

var a int  //聲明一個int類型的變量


var (  結構體// 同時聲明多個變量
    a int
    b bool
)

var a,b,c int // 同時聲明多個變量


var a = 1 // 聲明變量的同時賦值,編譯器自動推導其數據類型

tips,關於 a := 1 這種方法與 var  a = 1 效果相同,可以不書寫類型,編譯時會根據value自動推導類型進行匹配,但是但是,這種寫法只能在函數體中使用。:= 此符號是海象運算符

 

幾個需要注意的地方:

  1. 使用海象賦值法對float類型進行賦值時,正確的寫法---v1 := 3.0,錯誤的寫法---v1 := 3。
  2. 當不知道某個變量應該大寫還是小寫時,用小寫。因爲都用大寫最後項目整體會變大。
  3. 如果要使用go全局類型的變量,一定一定要注意它不爲空,否則很多地方會出現panic。
  4. 局部變量聲明但是不使用會報錯,但是全局變量聲明不使用不會報錯。
  5. 已經聲明的變量不允許被重新聲明,但可以被重新賦值。
  6. go全局變量在init之前執行。全局變量先執行聲明並賦值後,保證了導入該包後可以直接使用這個全局變量

 

 

go的值類型與引用類型

所有像 int、float、bool 和 string ,數組,struct這些基本類型都屬於值類型,使用這些類型的變量直接指向存在內存中的值

當使用等號 = 將一個變量的值賦值給另一個變量時,如:j = i,實際上是在內存中將 i 的值進行了拷貝可以通過 &i 來獲取變量 i 的內存地址,例如:0xf840000040(每次的地址都可能不一樣)。值類型的變量的值存儲在棧中。內存地址會根據機器的不同而有所不同,甚至相同的程序在不同的機器上執行後也會有不同的內存地址。因爲每臺機器可能有不同的存儲器佈局,並且位置分配也可能不同。

 

ptr,函數,映射,slice,map,chan更復雜的數據通常會需要使用多個字,這些數據一般使用引用類型保存。

一個引用類型的變量 r1 存儲的是 r1 的值所在的內存地址(不是具體的值),或內存地址中第一個字(比如切片)所在的位置。

這個內存地址爲稱之爲指針,這個指針實際上也被存在另外的某一個字中。同一個引用類型的指針指向的多個字可以是在連續的內存地址中(內存佈局是連續的),這也是計算效率最高的一種存儲形式;也可以將這些字分散存放在內存中,每個字都指示了下一個字所在的內存地址。

當使用賦值語句 r2 = r1 時,只有引用(地址)被複制,見下圖。

 

值類型與引用類型在當作參數進行傳遞時,會有很大的不同,後面會有介紹。

 

如果對你有幫助,可否在文章右側點個贊再走呢~~

 

本文爲原創,轉載請註明出處

 

文章目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章