Go 语言程序设计——集合类型(1)

Go语言的所有内置类型:数组、切片和映射

值、指针和引用类型

  • 值在传递给函数或者方法的时候会被复制一次
  • Go语言中的数组是按值传递的,因此传递一个大数组的代价非常大
  • 传递一个切片的成本与字符串差不多(在64位机器上为16字节,在32位机器上为12字节),无论该切片的长度或者容量是多大
  • 修改切片也不会导致写时复制的负担,因为不同于字符串的是,切片是可变的
  • 变量是赋给一内存块的名字,该内存块用于保存特定的数据类型
  • 指针:保存了另一变量内存地址的变量
  • & 操作符多重含义:
    • 当用作二元操作符时,它是按位与操作
    • 当用作一元操作符时,它返回的是操作数的地址,该地址可由一个指针保存(一元操作符 & 有时也被称为取址操作符)
  • *操作符多重含义:
    • 当用作二元操作符时,它将其操作数相乘
    • 当用作一元操作符时,它返回它所作用的指针所指向变量的值(一元操作符 * 有时也叫做内容操作符、间接操作符或者解引用操作符)
  • 使用指向值的指针叫做间接引用,如果我们使用指向指针的指针,这就叫做使用多重间接引用
  • 只要一个指针引用一个变量,那这个变量就会在内存中得以保留
  • . (点)操作符能够自动地将指针解引用为它所指向的结构体
  • 引用类型:映射、切片、通道、函数和方法,与指针不同,引用类型没有特殊的语法

数组和切片

  • 数组是一个定长的序列,其中的元素类型相同
  • ... (省略号)操作符会为我们自动的计算数组的长度
  • 创建数组时,如果没有被显式地初始化或者只是部分初始化,Go 语言会保证数组的所有项都被初始化成其相应的零值
  • Go 语言的切片比数组更加灵活、强大且方便
  • 数组 cap()len() 函数返回的数组一样
  • 数组是按值传递的(传递副本,虽然可以通过传递指针来避免)
  • 切片是长度可以可变、容量固定的相同类型元素的序列
  • 切片操作:


    切片操作
  • 内置函数 make() 用于创建切片、映射和通道

推荐阅读更多精彩内容