久久国产乱子伦精品免费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. 主站蜘蛛池模板: 延川县| 浦县| 汶上县| 九江市| 垣曲县| 惠州市| 德格县| 邵东县| 华安县| 和林格尔县| 米林县| 合江县| 电白县| 南涧| 离岛区| 邵阳市| 冀州市| 清远市| 铁岭市| 武冈市| 泾源县| 杨浦区| 麻城市| 广安市| 山丹县| 梅河口市| 广河县| 化隆| 五峰| 大化| 屏东市| 都江堰市| 昆明市| 青川县| 桃江县| 特克斯县| 灵宝市| 霍城县| 安泽县| 鄂州市| 乌鲁木齐市|