• [GO]、数组与切片


    1、数组

    Go 语⾔提供了数组类型的数据结构。

    数组是具有相同唯⼀类型的⼀组已编号且⻓度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符 串或者⾃定义类型。

    数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第⼀个元素索引为 0,第⼆个索引为 1,以 此类推。

    1.1、数组的定义

    = 是赋值, := 是声明变量并赋值

    1.2、数值取值

    1.3、二维数组

    2.Go语言切片(slice)

    Go 语⾔切⽚是对数组的抽象。

    Go 数组的⻓度不可改变,在特定场景中这样的集合就不太适⽤,Go 中提供了⼀种灵活,功能强悍的内置类型切⽚ ("动态数组"),与数组相⽐切⽚的⻓度是不固定的,可以追加元素,在追加时可能使切⽚的容量增⼤

    切片中的概念:

    • len:长度
    • cap:容量

    2.1、定义切片

    1. [root@nginx-kafaka03 08-06]# cat test.go
    2. package main
    3. import "fmt"
    4. func main() {
    5. var slice1 []int
    6. fmt.Println(slice1)
    7. var slice2 []int = make([]int,5)
    8. fmt.Println(slice2)
    9. slice3 := make([]int,5)
    10. fmt.Println(slice3)
    11. }
    12. [root@nginx-kafaka03 08-06]# go run test.go
    13. []
    14. [0 0 0 0 0]
    15. [0 0 0 0 0]

    2.2、切片初始化

    1. [root@nginx-kafaka03 08-06]# cat test.go
    2. package main
    3. import "fmt"
    4. func main() {
    5. s := [] int{1,2,3}
    6. s1 := s[0:2]
    7. fmt.Println(s,s1)
    8. }
    9. [root@nginx-kafaka03 08-06]# go run test.go
    10. [1 2 3] [1 2]

    2.3、len()和cap()函数

    切⽚是可索引的,并且可以由 len() ⽅法获取⻓度。

    切⽚提供了计算容量的⽅法 cap() 可以测量切⽚最⻓可以达到多少。

    以下为具体实例:

    2.4、切片截取

    可以通过设置下限及上限来设置截取切⽚ [lower-bound:upper-bound],实例如下:

    2.5、append()函数和copy()函数

    如果想增加切⽚的容量,我们必须创建⼀个新的更⼤的切⽚并把原分⽚的内容都拷⻉过来。

    下⾯的代码描述了从拷⻉切⽚的 copy ⽅法和向切⽚追加新元素的 append ⽅法。

     

    看变量地址

     

    数组和切片的区别:

    3、数组与切片

    3.1 数组的容量和⻓度

    数组的容量和⻓度是⼀样的。cap() 函数和 len() 函数均输出数组的容量(即⻓度)

    3.2 类型

    数组是 值类型 ,将⼀个数组赋值给另⼀个数组时,传递的是⼀份拷⻉。

    切⽚是 引⽤类型 ,切⽚包装的数组称为该切⽚的底层数组。看下⾯的例⼦:

     注意数组是⼀个固定⻓度的,初始化时候必须要指定⻓度,不指定⻓度的话就是切⽚了

    3.3、隐藏数组

     Go的切⽚是在数组之上的抽象数据类型,所以创建的切⽚始终都有⼀个数组存在。 举例说明:

    1. [a b c d e] [c d] [a b c]
    2. [a b 8 d e] [8 d] [a b 8]

     数组与切⽚的赋值形式

     

    从这个例⼦中可以看出,数组的赋值是值的拷⻉,是⼀个全新的数组。⽽切⽚的赋值是引⽤。下⾯再来看⼀个例⼦。

     这个例⼦再⼀次说明:数组是赋值是copy,⽽切⽚仅是引⽤。例⼦1和例⼦2中的切⽚的声明⽤到了隐藏数组。再 来看下例⼦3,使⽤⾮隐藏数组的情况。

     

     

     数组作为参数,被函数调⽤

     切⽚被调⽤时,直接传递引⽤

  • 相关阅读:
    RNA-seq 保姆教程:差异表达分析(一)
    JDK JRE JVM解释及Java代码编译运行过程
    数学建模笔记-第七讲-回归分析
    继承的使用以及super关键字和重写以及Object类
    《觉醒时刻:AI Agent引爆企业效率革命》第一章
    使用 QLoRA 进行微调Llama 2 和 Mistral的初学者指南
    分片架构设计技巧
    paddle2.3-基于联邦学习实现FedAVg算法-CNN
    基于Java+Vue前后端分离乐购游戏商城系统设计实现(源码+lw+部署文档+讲解等)
    每日论文阅读 2022-11-11
  • 原文地址:https://blog.csdn.net/m0_48638643/article/details/126190057