标准格式: var 变量名 变量类型
简短格式:(var) 变量名:= 值
举栗子
基础类型: var a int | var a , b string | var c byte | var d bool |
a := 10 | b := "123456" | c := ‘a‘ | d := true
基础类型包括:bool string
(u)int (u)int8 (u)int16 (u)int32 (u)int64 byte(同uint8) rune(同int32代表一个Unicode码)
float32 float64
complex64 complex128
数组
标准声明: var 数组变量名 [n]Type var array [10]int
简短格式:q := [...]int{1, 2, 3}
初始化:默认为对应类型的零值
- var array [3]int = [3]int{1, 2, 3}
- q := [...]int{1, 2, 3} 长度出现 ... 表示数组的长度是根据初始化值
- var array [3]int \ array = [3]int{1,2,3}
切片
直接声明: var name []Type
简短格式:(var)a := []int{1, 2, 3} //这两种声明和数组的区别在于没有定义个数
数组生成: slice[开始位置:结束为止] 如:a := [3]int{1,2,3} \ 开始位置从0开始,同数组下标; 结束位置不取值
a[1:2] 表示一个切片值为:[2]
a[:3] 表示[1 2 3] a[1:] 表示[2 3]
a[2] 表示[3] a[1] 表示[2]
make生成:make([]Type, size, cap) //cap为预分配,size为实际大小 ;len()函数计算时,输出结果为size值;cap提前分配空间,降低多次分配空间导致性能下降的可能
make一定发生了内存分配,数组生生成的,只是将新的切片结构指向已经分配好的内存区域,从这点上来说,数组生成的切片有点像指针。
初始化: var strList []string //值为 [] strList == nil
var numList := []int{} // 值为[] numList != nil
a := make([]int, 2, 10)
map
直接声明:var name map[keyType]valueType 如:var mapList map[int]string 直接声明后不能直接操作map下标因为此时变量指向空指针,make生成后可以
简短格式:mapList := map[int]string{1:"a", 2:"b"}
make生成:mapList := make(map[int]string) ; make 也可以定义预容量cap,有利于提高性能。
mapList[1] = "a" \ mapList[2] = "b"
make生成操作map更灵活, 不能使用new()来构造map,使用new会获得一个空引用的指针。
sync.Map
import "sync"
直接声明:var scene sync.Map
不可用make创建
list
import "container/list"
直接声明: var listA list.List
内部方法创建:listA := list.New()
chan
直接声明: var chanA = chan int ; 通道是引用类型,声明后值为nil,需要make
make: chanA = make(chan int)
简短格式: chanA := make(chan int)
原文:https://www.cnblogs.com/zz8781/p/12916886.html