久久国产乱子伦精品免费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. 主站蜘蛛池模板: 台东市| 宜川县| 义乌市| 汾阳市| 紫阳县| 湖州市| 清新县| 隆回县| 霍邱县| 鄂伦春自治旗| 永宁县| 铅山县| 吉首市| 石楼县| 金沙县| 德惠市| 堆龙德庆县| 岑溪市| 安新县| 黄山市| 五华县| 清原| 拜泉县| 浠水县| 常山县| 得荣县| 白玉县| 红安县| 普陀区| 什邡市| 永安市| 新民市| 阿克苏市| 图木舒克市| 娱乐| 上饶市| 乌鲁木齐市| 鄂托克前旗| 安远县| 凌海市| 濉溪县|