• 数组和切片


    一.数组


    Go语言的数组也是一个元素类型相同的定长的序列

    1.创建
    A.创建方式1:

    var iarray1 [5]int // 声明数组,自动赋值所有成员为0
    iarray1 = [5]int32{1, 2, 3, 4, 5}
    var iarray2 [5]int = [5]int32{1, 2, 3, 4, 5} //声明并初始化
    

      

    B.创建方式2:

    iarray3 := [5]int{1, 2, 3, 4, 5}
    

    C.创建方式3:

    iarray5 := [...]int{11, 12, 13, 14, 15}
    

      

    2.数组的长度和容量
    len(array)和cap(array)求值,两者一致.

    3.遍历数组

    for k, v := range iarray {
    		fmt.Println(k, v)
    }
    

      

    二.切片

    切片是长度可变、容量固定的相同的元素序列

    1.创建

    A.方式1:
    make ( []Type ,length, capacity )
    
    B.方式2:
    make ( []Type, length)
    
    C.方式3:
    []Type{}
    
    D.方式4:
    []Type{value1 , value2 , ... , valueN }
    

      

    除了make外,创建切片和数组唯一的区别是,Type 前的“ [] ”中是否有数字,为空,则代表切片,否则则代表数组.

    2.一个切片是一个隐藏数组的引用

    arr1 := []int{1, 3, 3, 3, 3}
    arr2 := arr1
    arr2[0] = 1000
    
    fmt.Println(arr1, arr2)
    

      

    // arr2更改值后,arr1也被更改了;数组则不会有此特性

    3.遍历/修改切片

    func main() {
    	arr1 := []int{1, 3, 3, 3, 3}
    	arr1[0] = 1000
    	for k, v := range arr1 {
    		fmt.Println(k, v)
    	}
    }
    

      

    4.追加/复制切片

    append:

    func main() {
    	arr1 := []int{1, 3, 3, 3, 3}
    	arr2 := append(arr1, 15, 20)
    	for k, v := range arr2 {
    		fmt.Println(k, v)
    	}
    }
    

      

    copy:

    func main() {
    	arr1 := []int{1, 3, 3, 3, 3}
    	arr2 := make([]int, 2)
    	copy(arr2, arr1) // 将arr1复制到arr2中,两个数组切片不一样大,就会按其中较小的那个数组切片的元素个数进行复制
    	arr2[0] = 500
    	fmt.Println(arr1, arr2)
    }
    

      

    三.数组和切片作为函数参数

    1.数组作为参数

    func Handle(arr [2]int) {
    	arr[0] = 100
    }
    
    func main() {
    	arr1 := [2]int{1, 52}
    	Handle(arr1)
    	fmt.Println(arr1)
    }
    

      

    // 参数传递是对数组的复制,Handle改变的是arr1的一个副本,不会对arr1有影响

    2.切片做参数

    func Handle(arr []int) {
    	arr[0] = 100
    }
    
    func main() {
    	arr1 := []int{1, 52}
    	Handle(arr1)
    	fmt.Println(arr1)
    }
    

      

    切片是一个引用,Handle改变了arr1的元素.

    Go语言的函数调用参数全部是传值的, 包括 slice/map/chan/inerface 在内所有类型.slice/map/chan/interface传递了引用.

      

  • 相关阅读:
    java上传1t文件
    上传1T文件
    超过20g的文件+上传
    文件批量下载
    下载超大文件的控件
    Java上传大文件夹
    Java超大文件上传解决办法
    vue+大文件上传控件
    cocos2dx3.1 win7安装步骤及编译到安桌
    Muller’s method (website)
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7638785.html
Copyright © 2020-2023  润新知