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

golang-切片slice的創(chuàng)建方式

 更新時間:2021年04月26日 10:47:28   作者:iRich_全棧  
這篇文章主要介紹了golang-切片slice的創(chuàng)建方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在創(chuàng)建一個新的切片是都會先創(chuàng)建一個長度為len的數(shù)組,并為其開辟一個cap長度為cap的額外空間,所以在cap范圍類增加元素,數(shù)組的起始地址不會改變,否則會創(chuàng)建一個新的數(shù)組,即起始的位置發(fā)生改變

數(shù)組創(chuàng)建

代碼

intArr:=[...]int{1,2,3,4,5,6,7,9}
//方式一指定開始和結(jié)束
s:=intArr[1:3]
//方式er指定開始和結(jié)束+容量
s:=intArr[1:3:6]

創(chuàng)建后的slice

[a: b :c]

a:起始位置

b:截取數(shù)據(jù)的結(jié)束位置 默認到末端)

c:截取后的容量位置 默認到末端)

len為截取的元素長度 即:(3 - 1=2)

cap為截取的起始元素到素組最后一個元素的長度 即:

(原數(shù)組長度:8 - 起始元素1=7)

底層數(shù)組: 為原數(shù)組的截取的起始元素到素組最后一個元素

在這里插入圖片描述

make創(chuàng)建

代碼

s:=make([]int,10,20)

創(chuàng)建后的slice

len為:10

cap為:20(在創(chuàng)建時指定)

底層數(shù)組: 長度為10的數(shù)組

slice擴容

在cap范圍內(nèi)不會創(chuàng)建新的底層數(shù)組

超過cap則會創(chuàng)建新的數(shù)組 ,生成新的cap和len 超過cap也會的

補充:golang 中使用數(shù)組創(chuàng)建slice時的注意事項

golang中,slice是對固定長度數(shù)組的一段切片,其底層是用對數(shù)值空間的指針實現(xiàn)的。

在golang中當使用一個數(shù)組來創(chuàng)建slice時如:

var array [5]int = [5]int{1,2,3,4,5}
//切割出數(shù)組中的4個值,創(chuàng)建一個slice
myslice := array[0:4]

打印array的值為:

1, 2, 3, 4, 5

打印mysqlice的值為:

1, 2, 3, 4

現(xiàn)在我們對myslice進行append操作

myslice = append(myslice,100)

打印array的值為:

1, 2, 3, 4, 100

打印mysqlice的值為:

1, 2, 3, 4, 100

現(xiàn)在我們再對myslice進行修改操作

myslice[0] = 50

打印array的值為:

50, 2, 3, 4, 100

打印mysqlice的值為:

50, 2, 3, 4, 100

當slice的長度沒有超過創(chuàng)建是的數(shù)組的長度時,slice還是指向的創(chuàng)建時使用的數(shù)組。

但是!

現(xiàn)在myslice的長度已經(jīng)和用來創(chuàng)建slice時使用的數(shù)組的長度一致了

我們再對myslice進行append操作,讓myslice的長度大于創(chuàng)建時使用的數(shù)組的長度

myslice = append(myslice,200)

打印array的值為:

50, 2, 3, 4, 100

打印mysqlice的值為:

50, 2, 3, 4, 100, 200

myslice不是通過指針的方式跟arr建立關(guān)聯(lián)的嗎?為毛這種情況卻沒有改變arr的值呢?

因為當myslice超出arr的長度時,Go語言會隱含式地對array做了copy,并讓myslice內(nèi)部的指針重新指向了新數(shù)值,所以一切預(yù)期中修改array的值的操作,都不會生效!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 淺析golang如何處理json中的null

    淺析golang如何處理json中的null

    json?是一種常用的數(shù)據(jù)格式,在?go?使用?json?序列化和反序列化時比較方便的,但在使用過程中,會遇到一些問題,比如?null,所以下面我們就來看看golang如何處理json中的null吧
    2023-09-09
  • mayfly-go部署和使用詳解

    mayfly-go部署和使用詳解

    這篇文章主要介紹了mayfly-go部署和使用詳解,此處部署基于CentOS7.4部署,結(jié)合實例代碼圖文給大家講解的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Go語言中實現(xiàn)完美錯誤處理實踐分享

    Go語言中實現(xiàn)完美錯誤處理實踐分享

    Go?語言是一門非常流行的編程語言,由于其高效的并發(fā)編程和出色的網(wǎng)絡(luò)編程能力,越來越受到廣大開發(fā)者的青睞。本文我們就來深入探討一下Go?語言中的錯誤處理機制吧
    2023-04-04
  • Golang通過小程序獲取微信openid的方法示例

    Golang通過小程序獲取微信openid的方法示例

    這篇文章主要介紹了Golang通過小程序獲取微信openid的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • GoLang實現(xiàn)日志收集器流程講解

    GoLang實現(xiàn)日志收集器流程講解

    這篇文章主要介紹了GoLang實現(xiàn)日志收集器流程,看日志是開發(fā)者平時排查BUG所必須的掌握的技能,但是日志冗雜,所以寫個小工具來收集這些日志幫助我們排查BUG,感興趣想要詳細了解可以參考下文
    2023-05-05
  • Go語言從單體服務(wù)到微服務(wù)設(shè)計方案詳解

    Go語言從單體服務(wù)到微服務(wù)設(shè)計方案詳解

    這篇文章主要為大家介紹了Go語言從單體服務(wù)到微服務(wù)設(shè)計方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Gin的中間件執(zhí)行流程與用法詳解

    Gin的中間件執(zhí)行流程與用法詳解

    我們在使用Gin框架進行Web開發(fā)的時候,基本上都會遇到登錄攔截的場景,在Gin當中,?中間件和業(yè)務(wù)處理函數(shù)都是一樣的類型,都是一種函數(shù),本文給大家介紹了Gin的中間件執(zhí)行流程與用法,需要的朋友可以參考下
    2024-04-04
  • Golang 使用接口實現(xiàn)泛型的方法示例

    Golang 使用接口實現(xiàn)泛型的方法示例

    這篇文章主要介紹了Golang 使用接口實現(xiàn)泛型的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Go代碼的組織和格式化規(guī)則實戰(zhàn)示例

    Go代碼的組織和格式化規(guī)則實戰(zhàn)示例

    這篇文章主要為大家介紹了Go代碼的組織和格式化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 使用Go語言實現(xiàn)找出兩個大文件中相同的記錄

    使用Go語言實現(xiàn)找出兩個大文件中相同的記錄

    這篇文章主要為大家詳細介紹了使用Go語言實現(xiàn)找出兩個大文件中相同的記錄的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-10-10

最新評論