error是接口类型 panic会引发函数中断执行defer ,在defer中使用recover捕获panic提交的错误对象(recover只能在defer中执行才有效) 多个panic仅最后一个被捕获 runtime/debug.PrintStrack()可以打印完整的堆栈信息 不可恢复性、导致系统无法正常工作的错误才会使用panic (文件系统没权限操作、服务端口被占用、数据库未启动等) 字符串是不可变字节(byte)序列,可用len获取长度,不可用cap; ` 支持跨行;允许字节数组访问,单不允许字节数组取地址 用切片指向数组时,底层还是指向该字符串 range遍历可以打印出汉字,len遍历出的汉字是乱码 append可以向[]byte追加 =》var bs []byte bs=append(bs,"abc"...) 字符串加法运算每次都会重新分配内存,构建大字符串性能极差;方法1:strings.Join 方法2:bytes.Buffer 小符串拼接使用fmt.Sprintf text/template等 utf8.RuneCountInString(s)代替len获取带汉字的字符串长度 长度是数组的类型组成部分,元素类型相同长度不同的数组不是同一类型 多维数组,只第一维支持... => [...][10] 如果元素支持== !=操作,则数组也支持 切片引用数组时,切片指针会指向数组地址;访问越界会报错;append会追加数组,当长度大于cap时会重新分配地址,则切片和数组就相互独立了 片 var a[]int 为nil,仅代表他为初始化,但依旧分配内存;且a[:]依旧是nil 如果切片长时间占用大数组的少量数据,建议切片单独分配地址,以让大数组尽早释放 可将字符串直接复制到[]byte => b:=make([]byte,3) n:=copy(b,"abcdefhg")=>n=3,b=[97 98 99] 字典的key必须支持== != 如数字、字符串、指针、数组、结构、接口 if v,ok:=m["d"];ok{存在} 使用ok-idiom模式判断key是否存在 delete(m,"d"),删除不存在的key不报错 map使用range迭代每次顺序不定