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

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

 更新時間:2019年11月26日 09:33:32   作者:pureyb  
這篇文章主要介紹了go切片的copy和view的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

語義理解切片

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

舉個例子看如下代碼:

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)該更加深入的理解,如:

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

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

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

copy 場景

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]

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

view 場景

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 能夠改變原數(shù)組

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

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

var b []int

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

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

相關(guān)文章

  • go語言中的Carbon庫時間處理技巧

    go語言中的Carbon庫時間處理技巧

    這篇文章主要介紹了go語言中的Carbon庫時間處理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Go指針內(nèi)存與安全性深入理解

    Go指針內(nèi)存與安全性深入理解

    這篇文章主要為大家介紹了Go指針內(nèi)存與安全性深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 如何使用Golang發(fā)送Get和Post請求

    如何使用Golang發(fā)送Get和Post請求

    這篇文章主要給大家介紹了關(guān)于如何使用Golang發(fā)送Get和Post請求的相關(guān)資料,Go語言(Golang)的標(biāo)準(zhǔn)庫提供了處理HTTP請求的功能,這使得將Go用于web應(yīng)用程序變得非常容易,需要的朋友可以參考下
    2023-06-06
  • Golang中Append()使用實例詳解

    Golang中Append()使用實例詳解

    今天在刷leetcode的時候,第113題讓我遇到了一個Go語言中append函數(shù)的一個坑,所以復(fù)習(xí)下,這篇文章主要給大家介紹了關(guān)于Golang中Append()使用的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 學(xué)習(xí)使用Go反射的用法示例

    學(xué)習(xí)使用Go反射的用法示例

    這篇文章主要介紹了學(xué)習(xí)使用Go反射的用法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Golang連接Redis數(shù)據(jù)庫的方法

    Golang連接Redis數(shù)據(jù)庫的方法

    這篇文章主要介紹了Golang連接Redis數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Go?Build編譯打包文件的完整步驟

    Go?Build編譯打包文件的完整步驟

    go build命令是用于編譯Go語言程序并生成可執(zhí)行文件,它可以將Go源代碼編譯成機(jī)器代碼,并將其打包成可執(zhí)行文件,方便在不同的操作系統(tǒng)上運行,這篇文章主要給大家介紹了關(guān)于Go?Build編譯打包文件的完整步驟,需要的朋友可以參考下
    2024-02-02
  • 成功安裝vscode中g(shù)o的相關(guān)插件(詳細(xì)教程)

    成功安裝vscode中g(shù)o的相關(guān)插件(詳細(xì)教程)

    這篇文章主要介紹了成功安裝vscode中g(shù)o的相關(guān)插件的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • golang并發(fā)下載多個文件的方法

    golang并發(fā)下載多個文件的方法

    今天小編就為大家分享一篇golang并發(fā)下載多個文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Go方法簡單性和高效性的充分體現(xiàn)詳解

    Go方法簡單性和高效性的充分體現(xiàn)詳解

    本文深入探討了Go語言中方法的各個方面,包括基礎(chǔ)概念、定義與聲明、特性、實戰(zhàn)應(yīng)用以及性能考量,文章充滿技術(shù)深度,通過實例和代碼演示,力圖幫助讀者全面理解Go方法的設(shè)計哲學(xué)和最佳實踐
    2023-10-10

最新評論