zoukankan      html  css  js  c++  java
  • 数组和切片

    一.数组


    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传递了引用.

      

  • 相关阅读:
    为什么要持续输出
    从Libra看区块链的机遇
    windows 通过choco 安装 .net core windowshosting
    java 正则表达式空格无法匹配
    docker jenkins 安装
    docker jenkins 前端node项目 自动化部署异常 env: ‘node’: No such file or directory
    jenkin docker node 自动化部署配置
    centos docker redis 安装
    Windows server 2012 出现大量无名已断开连接用户清楚办法
    spring boot 打包jar后访问classes文件夹的文件提示地址不存在
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7638785.html
Copyright © 2011-2022 走看看