久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Go語言中淺拷貝和深拷貝的區別是什么?

要想搞明白深拷貝和淺拷貝的區別,我們需要先弄懂以下幾點:

一、值類型和引用類型

Go 語言里面變量有兩類,一類是值類型,一類是引用類型。

兩者區別是什么呢?

我們在電腦里面創建的變量,都是需要內存來存放的。

值變量就是直接,一個內存地址對應一個值。

而引用變量,則是某個值存放的是另一個值的地址。

我畫了一個邏輯圖,幫助我們去理解這個概念。

Go語言中淺拷貝和深拷貝的區別是什么?

在 Go 語言中:

  • string、int、bool、float 等這些都屬于值類型
  • slice、map、chan 等這些都屬于引用類型

二、什么是淺拷貝和深拷貝?

而我們提到的深拷貝和淺拷貝,則指的是引用類型的值處理方案。

淺拷貝指的是,把變量里面存的內存地址拷貝了,所指向的真實值并沒拷貝。

像下面這張圖:

Go語言中淺拷貝和深拷貝的區別是什么?

0x004 淺拷貝到了 0x003 里面,實際上只是拷貝了一個 0x006 這個內存地址。

代碼是怎么實現的呢?

Go語言中淺拷貝和深拷貝的區別是什么?

怎么去證明是淺拷貝呢?

我們現在去改變下 a 切片里面的值:

Go語言中淺拷貝和深拷貝的區別是什么?

你會發現我改了 a 里面的值,b 里面的值同樣被改了。

為什么會這樣呢?

Go 的底層,slice 他其實是一個特殊的結構體,他包含三個字段:

Go語言中淺拷貝和深拷貝的區別是什么?

這個數組里面的 array 才是真實數組值的存放地址。

三、如何實現深拷貝?

Go 里面我們只需要使用 copy 即可:

Go語言中淺拷貝和深拷貝的區別是什么?

我們在初始化 b 數組的時候,我們需要指定數組的長度和容量,你可以直接 ?b := make([]string, 3)?但是我們并不建議這樣去寫。

這樣我們創建出來的 b ,就是獨立的一個數組切片了。

你學廢了么?

原文:https://mp.weixin.qq.com/s/uSOBfOLN4j3_VQtxHtJEWQ

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 乌拉特前旗| 项城市| 大英县| 呈贡县| 万山特区| 伊金霍洛旗| 荥经县| 汉中市| 保山市| 保康县| 江阴市| 陇川县| 土默特右旗| 台南县| 治县。| 佳木斯市| 通渭县| 土默特左旗| 涪陵区| 普兰县| 墨玉县| 囊谦县| 景宁| 房山区| 商都县| 曲阳县| 体育| 井研县| 聊城市| 徐汇区| 女性| 茶陵县| 张家口市| 庄浪县| 蚌埠市| 内江市| 武定县| 东安县| 阜南县| 虎林市| 巨鹿县|