欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang切片和數(shù)組拷貝詳解(淺拷貝和深拷貝)

 更新時間:2023年04月21日 10:58:28   作者:西京刀客  
這篇文章主要為大家詳細介紹一下Golang切片拷貝和數(shù)組拷貝,文中有詳細的代碼示例供大家參考,需要的可以參考一下

golang切片和數(shù)組拷貝

基礎

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

在 Go 語言中:
string、int、bool、float 等這些都屬于值類型
slice、map、chan 等這些都屬于引用類型

什么是淺拷貝和深拷貝?

我們提到的深拷貝和淺拷貝,則指的是引用類型的值處理方案。
淺拷貝指的是,把變量里面存的內存地址拷貝了,所指向的真實值并沒拷貝。

golang數(shù)組和切片的區(qū)別

1、定義方式不一樣

數(shù)組定義:

var a1 [3]int
var a2 [...]int{1,2,3}

切片定義

var b1 []int
b2 := make([]int, 3, 5)

2、初始化方法不一樣:

數(shù)組需要指定大小,不指定也會根據(jù)初始化的自動推算出大小,不可改變。
切片不需要指定大小。切片長度是可以改變。

數(shù)組初始化

a := [3]int{1,2,3} //指定長度
a := [...]int{1,2,3} //不指定長度

切片初始化

s := make([]int, 3) //指定長度
s := []int{1,2,3} //不指定長度

3、函數(shù)傳遞方式不同:數(shù)組是值傳遞,切片是地址傳遞。
數(shù)組是值類型,數(shù)組傳遞是值。切片是引用類型,切片傳遞是指針

4、切片通過append添加元素
數(shù)組不能使用append

Golang中的值傳遞和引用傳遞

golang默認都是采用值傳遞,即拷貝傳遞,也就是深拷貝。 只有一些特定的類型,如slice、map、channel、function、pointer這些天生就是指針的類型,是通過引用傳遞的。(切片是引用傳遞,數(shù)組是值傳遞)切片和數(shù)組的區(qū)別。

總結: 1、golang默認是值傳遞,即拷貝傳遞;
2、有些值天生就是指針,如(切片,map類型)

golang數(shù)組拷貝

默認情況下Golang的數(shù)組傳遞是值傳遞,但當我們想要對傳入的數(shù)組進行修改時,可以使用指針來對數(shù)組進行操作,如下:

func main() {
   arr := [3]int{1, 2, 3}
   arr2 := arr
   arr3 := &arr
   fmt.Printf("原數(shù)組:%v \n", arr)
   fmt.Printf("賦值方式復制的數(shù)組:%v \n", arr2)
   fmt.Printf("引用方式復制的數(shù)組:%v \n", *arr3)
   arr[1] = 1000
   fmt.Printf("改變后原數(shù)組:%v \n", arr)
   fmt.Printf("改變后賦值方式復制的數(shù)組:%v \n", arr2)
   fmt.Printf("改變后引用方式復制的數(shù)組:%v \n", *arr3)
}

arr2獲得的是arr的數(shù)據(jù)副本,也就是說賦值方式是復制了原數(shù)組的底層數(shù)據(jù);

而arr3獲得的是arr地址的副本,即引用賦值的方式復制的是地址,這個地址指向的還是原來的數(shù)據(jù)。

golang切片拷貝

copy復制會比等號復制慢。但是copy復制為值復制,改變原切片的值不會影響新切片。而等號復制為指針復制,改變原切片或新切片都會對另一個產生影響。

由于切片是引用類型。但自身是結構體,值拷貝傳遞。如果直接使用 target:=source 那么操作target也會影響source數(shù)值。

target:= make([]int, len(source))
copy(target, source)

數(shù)組和切片拷貝總結

針對需要復制拷貝:

  • 如果復制數(shù)組,可以直接通過賦值進行復制;
  • 如果復制切片,可以直接使用copy();

到此這篇關于Golang切片和數(shù)組拷貝詳解的文章就介紹到這了,更多相關golang切片和數(shù)組拷貝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • Go語言之結構體與方法

    Go語言之結構體與方法

    這篇文章主要介紹了Go語言之結構體與方法,結構體是由一系列具有相同類型或不同類型的數(shù)據(jù)構成的數(shù)據(jù)集合。下面我們就一起來學習什么是Go語言之結構體
    2021-10-10
  • golang如何利用原始套接字構造UDP包詳解

    golang如何利用原始套接字構造UDP包詳解

    這篇文章主要給大家介紹了關于golang如何利用原始套接字構造UDP包的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用golang具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-10-10
  • Go語言中字符串拼接的方法總結

    Go語言中字符串拼接的方法總結

    在Go語言中,我們可以使用+操作符、bytes.Buffer、strings.Builder等方法來拼接字符串,本文主要為大家介紹了這些常用方法的實現(xiàn)以及性能對比,感興趣的小伙伴可以了解下
    2023-11-11
  • go語言操作es的實現(xiàn)示例

    go語言操作es的實現(xiàn)示例

    本文主要介紹了go語言操作es的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 詳解Go語言中如何通過Goroutine實現(xiàn)高并發(fā)

    詳解Go語言中如何通過Goroutine實現(xiàn)高并發(fā)

    在Go語言中,并發(fā)編程是一個核心且強大的特性,Go語言通過goroutine和channel等機制,使得并發(fā)編程變得更加簡單和直觀,本文給大家介紹了Go語言中如何通過Goroutine快速實現(xiàn)高并發(fā),感興趣的小伙伴跟著小編一起來看看吧
    2024-10-10
  • golang 實現(xiàn)時間戳和時間的轉化

    golang 實現(xiàn)時間戳和時間的轉化

    這篇文章主要介紹了golang 實現(xiàn)時間戳和時間的轉化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 詳解Go-JWT-RESTful身份認證教程

    詳解Go-JWT-RESTful身份認證教程

    這篇文章主要介紹了詳解Go-JWT-RESTful身份認證教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Go語言調用ffmpeg-api實現(xiàn)音頻重采樣

    Go語言調用ffmpeg-api實現(xiàn)音頻重采樣

    最近對golang處理音視頻很感興趣,對golang音視頻常用庫goav進行了一番研究。自己寫了一個wav轉采樣率的功能。給大家分享一下,中間遇到了不少坑,解決的過程中還是蠻有意思的,希望大家能喜歡
    2022-12-12
  • Go設計模式之備忘錄模式講解和代碼示例

    Go設計模式之備忘錄模式講解和代碼示例

    備忘錄是一種行為設計模式, 允許生成對象狀態(tài)的快照并在以后將其還原,本文就通過代碼示例給大家講講Go備忘錄模式,感興趣的小伙伴跟著小編一起來看看吧
    2023-08-08
  • golang 并發(fā)編程之生產者消費者詳解

    golang 并發(fā)編程之生產者消費者詳解

    這篇文章主要介紹了golang 并發(fā)編程之生產者消費者詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論