主頁 > 知識(shí)庫 > go切片的copy和view的使用方法

go切片的copy和view的使用方法

熱門標(biāo)簽:廣州呼叫中心外呼系統(tǒng) 學(xué)海導(dǎo)航地圖標(biāo)注 中國(guó)地圖標(biāo)注省會(huì)高清 浙江高速公路地圖標(biāo)注 高德地圖標(biāo)注口訣 江西轉(zhuǎn)化率高的羿智云外呼系統(tǒng) 西部云谷一期地圖標(biāo)注 地圖標(biāo)注的汽車標(biāo) 南通如皋申請(qǐng)開通400電話

語義理解切片

go 語言中的切片是 go 語言的一個(gè)特色,從語義上來說,切片就是把一個(gè)整體的東西切分成小的部分,那么對(duì)于語言中的切片也是同理。

舉個(gè)例子看如下代碼:

package main
import "fmt"
func main() {
 arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
 fmt.Println("arr[2:6]:", arr[2:6]) // 從下標(biāo)2到下標(biāo)6
 fmt.Println("arr[:6]:", arr[:6]) // 從下標(biāo)0到下標(biāo)6
 fmt.Println("arr[2:]:", arr[2:]) // 從下標(biāo)2到最后
 fmt.Println("arr[:]:", arr[:]) // 全部
}

輸出結(jié)果為:

arr[2:6]: [2 3 4 5]
arr[:6]: [0 1 2 3 4 5]
arr[2:]: [2 3 4 5 6 7]
arr[:]: [0 1 2 3 4 5 6 7]

這里可以很明確的看出,我們想要 arr 數(shù)組的哪一部分,我們就切哪一部分。

當(dāng)然,如果僅僅知道切片是這么用的當(dāng)然還不夠,我們應(yīng)該更加深入的理解,如:

對(duì)原數(shù)組的 copy 還是 view 。

對(duì)于 go 語言的數(shù)組,copy 和 view 是同時(shí)都存在的。

  • copy 就是使用這個(gè)數(shù)組的時(shí)候我將這個(gè)數(shù)組拷貝一份,這樣對(duì)于數(shù)組的增刪改,是不會(huì)改變?cè)瓟?shù)組的值的
  • view 由數(shù)組執(zhí)行切片所返回的對(duì)象是一個(gè) view,即視圖,若我們?cè)谝晥D上操作數(shù)組,會(huì)改變?cè)瓟?shù)組,

copy 場(chǎng)景

package main

import (
 "fmt"
)

func updateArr(arr [5]int) {
 arr[0] = 100
 fmt.Println("修改后的arr:", arr)
}

func main() {
 arr3 := [...]int{2, 4, 5, 6, 7}
 fmt.Println("原來的:", arr3)
 updateArr(arr3)
 fmt.Println("再次查看原始的:", arr3)
}

輸出結(jié)果:

原來的: [2 4 5 6 7]
修改后的arr: [100 4 5 6 7]
再次查看原始的: [2 4 5 6 7]

如上代碼可以看到,我們?cè)?updateArr 里面修改了下標(biāo)為 0 的值,但是我們輸出原始數(shù)組的時(shí)候,并沒有變。這就是對(duì)數(shù)組 copy。

view 場(chǎng)景

func updateArr(arr []int) {
 arr[0] = 100
 fmt.Println("修改后的arr:", arr)
}

func main() {
 arr3 := [...]int{2, 4, 5, 6, 7}
 fmt.Println("原來的:", arr3)
 // 使用切片
 updateArr(arr3[:])
 fmt.Println("再次查看原始的:", arr3)
}

輸出結(jié)果:

原來的: [2 4 5 6 7]
修改后的arr: [100 4 5 6 7]
再次查看原始的: [100 4 5 6 7]

為什么 view 能夠改變?cè)瓟?shù)組

雖然 Slice 本身是值類型,但是它內(nèi)部使用了對(duì)數(shù)組的指針引用,所以修改切片數(shù)據(jù),會(huì)將數(shù)組原有數(shù)據(jù)修改掉。

當(dāng)然,在理解上面的同時(shí),一定要知道 go 是如何定義一個(gè)切片的

var b []int

所以,在 updateArr 這個(gè)函數(shù)傳參的時(shí)候 arr []int 是傳切片進(jìn)去。不然會(huì)報(bào)錯(cuò)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • golang中切片copy復(fù)制和等號(hào)復(fù)制的區(qū)別介紹
  • go語言中切片與內(nèi)存復(fù)制 memcpy 的實(shí)現(xiàn)操作
  • Go語言中的UTF-8實(shí)現(xiàn)
  • golang中實(shí)現(xiàn)給gif、png、jpeg圖片添加文字水印
  • Go語言帶緩沖的通道實(shí)現(xiàn)
  • go語言求任意類型切片的長(zhǎng)度操作
  • Go語言切片前或中間插入項(xiàng)與內(nèi)置copy()函數(shù)詳解

標(biāo)簽:常州 許昌 貴州 保定 曲靖 東營(yíng) 吐魯番 德宏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《go切片的copy和view的使用方法》,本文關(guān)鍵詞  切片,的,copy,和,view,使用方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go切片的copy和view的使用方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于go切片的copy和view的使用方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章