常見的值類型和引用類型分別有哪些?
值類型:基本數據類型 int 系列, float 系列, bool, string 、數組和結構體struct,使用這些類型的變量直接指向存在內存中的值,值類型的變量的值通常存儲在棧中。
引用類型:指針、slice切片、map、管道chan、interface 等都是引用類型
數據存儲的兩大塊:棧和堆
在內存里分成兩大塊,棧和堆,值類型的變量通常存儲在棧區,引用類型通常存儲在堆區,在golang中,但有可能值類型也存儲在堆區,反過來也有可能引用類型存儲在棧區。
兩種類型的區別(拷貝操作和函數傳參)
值類型:值類型的變量通常在棧中分配。當使用等號=將一個變量的值賦給另一個變量時,如num=100, j = num,實際上是在內存中將num的值進行了拷貝。可以通過 &i 獲取變量 i 的內存地址。? 值拷貝
引用類型:變量存儲的是一個地址,這個地址對應的空間才真正存儲數據(值),內存通常在堆上分配,當沒有任何變量引用這個地址時,該地址對應的數據空間就成為一個垃圾,由GC來回收。?
引用類型擁有更復雜的存儲結構:(1)分配內存 (2)初始化一系列屬性等一個引用類型的變量r1存儲的是r1的值所在的內存地址(數字),或內存地址中第一個數字所在的位置,這個內存地址被稱之為指針,這個指針實際上也被存在另外的某一個數字中。 可以看本篇文章了解Golang指針基本介紹及使用案例