今天小編給大家分享一下Go值類型和引用類型是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
所有像 int、float、bool 和 string 這些基本類型都屬于值類型,使用這些類型的變量直接指向存在內存中的值:
當使用等號 =
將一個變量的值賦值給另一個變量時,如:j = i
,實際上是在內存中將 i 的值進行了拷貝:
你可以通過 &i 來獲取變量 i 的內存地址,例如:0xf840000040(每次的地址都可能不一樣)。
值類型變量的值存儲在堆中。
內存地址會根據機器的不同而有所不同,甚至相同的程序在不同的機器上執行后也會有不同的內存地址。因為每臺機器可能有不同的存儲器布局,并且位置分配也可能不同。
更復雜的數據通常會需要使用多個字,這些數據一般使用引用類型保存。
一個引用類型的變量 r1 存儲的是 r1 的值所在的內存地址(數字),或內存地址中第一個字所在的位置。
這個內存地址稱之為指針,這個指針實際上也被存在另外的某一個值中。
同一個引用類型的指針指向的多個字可以是在連續的內存地址中(內存布局是連續的),這也是計算效率最高的一種存儲形式;也可以將這些字分散存放在內存中,每個字都指示了下一個字所在的內存地址。
當使用賦值語句 r2 = r1 時,只有引用(地址)被復制。
如果 r1 的值被改變了,那么這個值的所有引用都會指向被修改后的內容,在這個例子中,r2 也會受到影響。
以上就是“Go值類型和引用類型是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。