channel
nil和close channel
读写nil均会阻塞。敞开的管道依然能够读取数据(包含select也会选中),向敞开的管道写数据会处触发panic
slice
make slice
s := make([]int, 10, 100)
a := new([]int) fmt.Println(*a == nil) // true b := make([]int, 0) fmt.Println(b == nil) // true var c []int fmt.Println(c == nil) // false
切取
有两种表达方式:
a[low:hight]a[low:high:max] // 其中max示意容量
a是数组和slice都会生成slice,如果a是字符串那么会生成字符串
数据结构
var a []inttype SliceHeader struct { Data uintptr // 0 Len int // 0 Cap int // 0}
var a = make([]int, 0)var b = []int{}type SliceHeader struct { Data uintptr // 指向8字节内容 Len int // 0 Cap int // 0}
string
utf-8
func testString() { a := "你好" fmt.Println(len(a)) // 6 for i, c := range a { fmt.Println(i, c, string(c)) // c是int32 // 0 20320 你 // 3 22909 好 }}