Go语言的所有内置类型:数组、切片和映射
值、指针和引用类型
- 值在传递给函数或者方法的时候会被复制一次
- Go语言中的数组是按值传递的,因此传递一个大数组的代价非常大
- 传递一个切片的成本与字符串差不多(在64位机器上为16字节,在32位机器上为12字节),无论该切片的长度或者容量是多大
- 修改切片也不会导致写时复制的负担,因为不同于字符串的是,切片是可变的
- 变量是赋给一内存块的名字,该内存块用于保存特定的数据类型
- 指针:保存了另一变量内存地址的变量
-
&
操作符多重含义:- 当用作二元操作符时,它是按位与操作
- 当用作一元操作符时,它返回的是操作数的地址,该地址可由一个指针保存(一元操作符
&
有时也被称为取址操作符)
-
*
操作符多重含义:- 当用作二元操作符时,它将其操作数相乘
- 当用作一元操作符时,它返回它所作用的指针所指向变量的值(一元操作符
*
有时也叫做内容操作符、间接操作符或者解引用操作符)
- 使用指向值的指针叫做间接引用,如果我们使用指向指针的指针,这就叫做使用多重间接引用
- 只要一个指针引用一个变量,那这个变量就会在内存中得以保留
-
.
(点)操作符能够自动地将指针解引用为它所指向的结构体 - 引用类型:映射、切片、通道、函数和方法,与指针不同,引用类型没有特殊的语法
数组和切片
- 数组是一个定长的序列,其中的元素类型相同
-
...
(省略号)操作符会为我们自动的计算数组的长度 - 创建数组时,如果没有被显式地初始化或者只是部分初始化,Go 语言会保证数组的所有项都被初始化成其相应的零值
- Go 语言的切片比数组更加灵活、强大且方便
- 数组
cap()
和len()
函数返回的数组一样 - 数组是按值传递的(传递副本,虽然可以通过传递指针来避免)
- 切片是长度可以可变、容量固定的相同类型元素的序列
-
切片操作:
切片操作 - 内置函数
make()
用于创建切片、映射和通道