美文网首页
07 | 数组与切片

07 | 数组与切片

作者: 刀斧手何在 | 来源:发表于2020-03-21 18:15 被阅读0次

    数组

    • 声明数组需指定元素类型和元素个数
    func TestArray(t *testing.T){
        arr := [3]int{1,2,3}
        t.Log(arr)
    }
    //result : [1,2,3]
    
    • 初始化赋值元素个数要小于,或等于指定个数。没有初始化的元素,默认赋零值
    func TestArray(t *testing.T){
        arr := [3]int{}
    
        t.Log(arr)
    }
    //result : [0,0,0]
    
    • 可使用...忽略设置元素个数,自动根据初始化元素分配对应长度数组
    func TestArray(t *testing.T){
        arr := [...]int{}
        arr2 := [...]int{1,0}
        t.Log(arr,arr2)
    }
    //result : [] [1,0]
    
    • 使用cap() ,len()查看数组大小,go语言数组不能扩容
    func TestArray(t *testing.T){
        arr := [...]int{1,0}
        t.Log(arr,cap(arr),len(arr))
    }
    //result : [1 0] 2 2
    
    • 函数参数和返回值定义必须指定具体元素个数
    func  getLen(arr [...]int) int {
        return len(arr)
    }
    
    func TestArray(t *testing.T){
        arr := [...]int{1,0}
        t.Log(getLen(arr))
    }
    //result : use of [...] array outside of array literal
    
    func  getLen(arr [2]int) int {
        return len(arr)
    }
    
    func TestArray(t *testing.T){
        arr := [...]int{1,0}
        t.Log(getLen(arr))
    }
    //result : 2
    

    原因: ... 自动推导个数必须在编译时确定,函数行参无法在编译时确定元素个数?
    所以Go语言中常用的是函数传切片而不是传数组

    • 支持多维数组

    切片

    A slice, on the other hand, is a dynamically-sized, flexible view into the elements of an array

    • 声明切片几种方式
    1. 直接声明
    func TestSlice(t *testing.T) {
        var slice []int
        t.Log(reflect.TypeOf(slice))
    }
    //result : []int
    
    1. 声明并赋字面值
    func TestSlice(t *testing.T) {
        slice := []int{1,2,3,4}
        t.Log(slice)
        t.Log(reflect.TypeOf(slice))
    }
    //result: [1,2,3,4] []int
    
    1. 从数组或切片中切出
    func TestSlice(t *testing.T) {
        arr := [...]int{1,2,3,4}
        slice := arr[0:3]
        slice2 := slice[1:2]
        t.Log(slice,slice2)
        t.Log(reflect.TypeOf(slice),reflect.TypeOf(slice))
    }
    
    • 不允许创建容量比长度小的切片
    • 切片只有底层数组有关
    • 使用append增加元素 切片允许扩容
    • 指定第三个参数限制切片容量
    • 空切片和nil 切片 if==nil

    推荐阅读

    相关文章

      网友评论

          本文标题:07 | 数组与切片

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