go语言学习笔记(7) 类型-复合类型

来源:互联网 发布:手绘地图软件 编辑:程序博客网 时间:2024/06/06 19:52
复合类型
     pointer
     array
     slice(切片)
     map(字典)
     chan(通道)
     struct
     interface

对于元素是简单类型的array, slice, map等
     都可以直接用fmt.Println直接进行打印输出所有元素

array
     类型: [n][m]...元素类型
          [12] byte          [23]*int          [12]struct{x, y int}
          [12][23]int=== [12]([23]int),二维数组长度12,一维数组长度23
               同C的: int arr[12][23];

     数组长度
          1、数组长度必须是常量、常量表达式,即编译期已知
          2、数组长度是数组类型的内置常量,len函数可以获取: len(arr)

     元素访问
          1、下标访问,arr[i][j]
          2、关键字range
               range返回两个参数: 数组下标 数组元素
                    for i, v := range arr{...}
          3、打印数组
               1)、遍历数组,分别打印数组元素
               2)、fmt.Println(arr),直接打印数组所有元素

     数组赋值
          1、遍历赋值
          2、声明时,一起赋值
               var narr [3][4]int =[3][4]int{{1, 2, 3, 4}, {11, 12, 13, 14}, {21, 22, 23, 24}}
               var narr [3][4]int = [3][4]int{{1, 2, 3, 4}, {11, 12, 13, 14}}
               var narr [3][4]int = [3][4]int{{1, 2, 3}, {11, 12, 13, }}
               var narr []int = []int{1, 2, 3, 4} //先定义一个匿名数组。然后赋值给narr
               1)、未赋值的元素,初始化为0
               2)、赋值长度大于数组长度时,编译报错

     1、数组是一个值类型,不同于C(修改数组实参的值,需要用到数组切片,即slice)
          值类型:在赋值和参数传递时,进行复制

slice
     数组切片,类似指向数组的指针,实际有自己的数据结构
     数据结构:
          1、指向原生数组的指针
          2、数组切片中的元素个数
          3、数组切片已分配的存储空间

     创建数组切片
          1、基于数组
               var sl []int = narr[first:last]
                    1)、取值范围下标[first, last)
                    2)、first、last可省略:分别表示从开头、到最后
          2、基于数组切片
               基本同基于数组的情况
               last可以是数组切片的容量,即可大于数组切片的大小
          3、直接创建
               sl := make([]int, 5) //创建5个元素的数组切片
               sl := make([]int, 5, 10) //创建5个元素的数组切片,但总共分配10个元素的空间
               sl := []int{1, 2, 3, 4, 5}

     数组切片的大小与容量
          len(sl): 获取大小,同数组
          cap(sl): 获取容量,数组切片的容量和大小可以不同
               当数组切片的容量不够时,会自动扩展空间,可能涉及到数据的复制

     元素访问
          同数组

     追加元素
          sl = append(sl, 1, 2, 3) //创建一个新的数组切片,元素依次为sl的所有元素,1,2,3
               返回新创建的数组切片
          sl = append(sl, sl2...) //创建一个新的数组切片,元素依次为sl,sl2的所有元素
               返回新创建的数组切片
               sl2...:将sl2内的元素全部导出,然后附加到参数表

     元素复制
          1、直接相互赋值,会完全替换
               sl = sl2
          2、copy函数
               copy(sl, sl2) //复制sl2的元素到sl,复制的大小取决于两个数组切片的长度较小的一方

map
     类型: map[KeyType] ValueType
     声明变量后,还需要创建map,才能使用map型的变量
     声明map型变量
          var map1 map[int] string
     创建map
          map1 = make(map[int] string)
          map1 = make(map[int] string, 10) //创建时,指定容量
          map1 = map[int] string{ //创建时,进行赋值
               1 : "sun",
               2 : "wang",//这里的逗号必须有,否则报语法错误
          }               //如果写成一行代码,最后这个元素的后面的逗号可有可无
                          //如果多行写,这个逗号必须有
                          //同样适用于其他复合类型
          map2 := make(map[int] string){ //创建时,进行赋值
               1 : "sun",
               2 : "wang",
          }
     元素赋值
          map1[3] = "li"
     元素删除
          delete(map1, 3)
     元素查找
          v, b = map1[3]
               v: 3对应的值
               b: bool类型,是否找到对应的键值对
          
阅读全文
0 0