Go語言中的值類型和引用類型


一、值類型和引用類型
值類型:int、float、bool和string這些類型都屬於值類型,使用這些類型的變量直接指向存在內存中的值,值類型的變量的值存儲在棧中。當使用等號=將一個變量的值賦給另一個變量時,如 j = i ,實際上是在內存中將 i 的值進行了拷貝。可以通過 &i 獲取變量 i 的內存地址。  值拷貝

引用類型:特指slice、map、channel這三種預定義類型。引用類型擁有更復雜的存儲結構:(1)分配內存 (2)初始化一系列屬性等一個引用類型的變量r1存儲的是r1的值所在的內存地址(數字),或內存地址中第一個字所在的位置,這個內存地址被稱之為指針,這個指針實際上也被存在另外的某一個字中。  

兩者的主要區別:拷貝操作和函數傳參。

二、實例詳解值類型和引用類型
數組array和切片slice的實例:

定義了一個數組a,它是值類型,復制給b是copy,當b發生變化后a並不會發生任何變化,程序的執行結果如下所示:

//由 main 函數作為程序入口點啟動
func main() {
	a :=[5]int{1,2,3,4,5}
	b := a
	b[2] = 8
	fmt.Println(a, b)
}

 

切片則不然,如下代碼所示:

//由 main 函數作為程序入口點啟動
func main() {
	a :=[]int{1,2,3,4,5}
	b := a
	b[2] = 8
	fmt.Println(a, b)
}

程序輸出結果:a和b本質上指向同一個底層數組。  切片的底層數據結構其實是一個指針、len、cap。

 



原文:https://blog.csdn.net/li_101357/article/details/80199636


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM