美文网首页
Go 数组和切片的区别

Go 数组和切片的区别

作者: quanCN | 来源:发表于2021-08-15 14:24 被阅读0次

内部实现

  • 数组
    数组是一个长度固定的数据类型,用于存储一段具有相同类型的元素的连续块。数组存储的类型可以是内置类型,如整型或者字符串,也可以是某种结构类型。
  • 切片
    切片是围绕动态数组的概念构建的,可以按需自动增长和缩小
    切片是一个很小的对象,对底层数组进行了抽象,并提供了相关的操作方法。切片有3个字段分别是指向底层数组的指针切片访问的元素个数(即长度)切片允许增长到的元素个数(即容量)

声明和初始化

  • 数组
    //声明一个包含5个元素的整型数组,并设置为零值
    var array [5]int
    //使用数组字面量声明数组
    array := [5]int{10,20,30,40,50}
    //隐式声明数组长度
    array := [...]int{10,20,30,40,50}
    //声明数组并指定特定元素
    array := [5]int{0:10,2:30}
    
  • 切片
    //使用make
    //长度和容量都是5个元素
    slice := make([]string, 5)
    //长度为3,容量为5个元素
    slice := make([]int, 3, 5)
    
    //使用字面量声明
    //长度和容量都是4个元素
    slice := []string{"red","blue","green","yellow"}
    //声明切片 并指定特定元素 长度容量都是100
    slice := []string{99:"!!"}
    

赋值

  • 数组
    func main() {
        var array1[5]string
        array2:=[5]string{"Red","Blue","Green","Yellow","Pink"}
    
        //把array2的值复制到array1
        array1=array2
        array1[0] = "Black"
        fmt.Println(array1)
        fmt.Println(array2)
    }
    

    如图数组赋值仅仅是复制数组的值


  • 切片
    func main() {
        slice := []int{1,2,3,4,5}
        slice2 := slice
        slice2[1] = 100
        fmt.Println(slice)
        fmt.Println(slice2)
    }
    
    切片赋值,仅仅是复制切片的指针、长度和容量

函数传递

  • 数组
    在函数之间传递变量时,总以值的方式传递的
    func test(arr [3]int) {
        arr[2] = 300
    }
    
    func test1(arr *[3]int) {
        arr[1] = 200
    }
    
    func main() {
        arr := [...]int{1,2,3}
        fmt.Println(arr)
        test(arr)
        fmt.Println(arr)
        test1(&arr)
        fmt.Println(arr)
    }
    
  • 切片
    在函数间传递切片就是要在函数间以值的方式传递切片
    func test(slice []int) {
        slice[1] = 100
    }
    
    func main() {
        slice := []int{1,2,3,4,5}
        test(slice)
        fmt.Println(slice)
    }
    
    在64位机上,一个切片需要24字节的内存,指针x8,长度和容量x8,由于与切片关联的数据包含在底层数组里,不属于切片本身,所以将切片复制到任意函数的时候,对底层数组的大小都不会有影响。复制时只会复制切片本身,不会涉及到底层数组

相关文章

  • <>

    数组和切片 切片和数组的区别 数组是属于值类型。结构体,基础类型数据也属于值类型。 注意GO语言对于“传值和传引用...

  • Go数组和切片区别

    数组是值传递,切片是引用传递 切片可扩容 切片多一个cap属性 切片底层用数组实现

  • golang入门到放弃:3.数组、切片、map

    数组 切片 数组和切片的区别 数组必须要指定长度,如果定义时不指定长度,go语言也会根据元素中的个数自动设置值数组...

  • Go 数组和切片的区别

    内部实现 数组数组是一个长度固定的数据类型,用于存储一段具有相同类型的元素的连续块。数组存储的类型可以是内置类型,...

  • Go基础面试题

    4.说说Go语言中,数组和切片的区别?切片的底层 数组 数组的长度是类型的一部分,不同的长度的数组,类型不是一致...

  • 第03天(复合类型)_03

    13_数组做函数参数.go 14_数组指针做函数参数.go 15_切片的长度和容量.go 16_切片的创建.go ...

  • Go语言 数组和切片区别

    首先看下它们的定义: 数组:类型 [n]T 表示拥有 n 个 T 类型的值的数组。切片:类型 []T 表示一个元素...

  • Go语言切片

    // //Go语言切片 // /* // go语言切片是对数组的抽象 // Go 数组的长度不可改变,在特定场景中...

  • Go学习笔记-数组和切片区别

    这里不介绍数组和切片的使用技巧,主要看下2者的区别。 首先看下它们的定义: 数组:类型 [n]T 表示拥有 n 个...

  • 七、Go切片

    七、Go语言切片(Slice) Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就...

网友评论

      本文标题:Go 数组和切片的区别

      本文链接:https://www.haomeiwen.com/subject/zijubltx.html