测试及调优
传统测试 assert 缺点:
测试数据和逻辑混合在一起出错信息不明确一旦一个数据出错测试全部结束
表格驱动测试 优点:
分离的测试数据和测试逻辑明确的出错信息可以部分失败
测试编写 ...
错误处理
defer defer 关键字,用于延迟执行一个函数在函数结束前执行 其执行顺序为 先进后出,可以理解为栈
123456789101112131415161718192021defer fm ...
接口
go 采用duck typing 模式实现一个接口是隐式的,只用实现接口对应的方法即可,所以只用使用者定义需要实现的方法即可
1234567891011121314151617181920212 ...
接口的组合
在接口的声明内包含想要包含的接口即可12345type Requests interface { Downloader Post() Session()}常用系统接口
Strin ...
空接口 interface{}
空接口没有任何方法,所以所有的结构体都实现了空接口空接口可以存储任何类型的值
1234567891011121314151617181920212223242526272829303132type ...
接口的值的类型
接口变量内部是存储的类型和值的指针,所以并不用是用接口的指针接口变量也是值传递指针接受者只能以指针方式使用,值接受者都可以
go 中 取接口的类型有两种方式
switch
123456789101 ...
扩展已有类型 - 继承 组合
别名 type 不只是定义别名, 而是定义了一个新类型,所以两个类型是不能直接赋值的,要经过转换 不会继承原类型的方法
12345678910//type newtypename oldtypen ...
包和封装
包
每个目录只能有一个包,子目录算另外一个目录 main包包含入口文件也就是main函数 给一个结构定义的方法必须放到同一个包(可不同文件)
封装
go 命名一般采用CamelCase go中 ...
结构体和方法
基础
仅支持封装,不支持继承和多态,所以没有class只有struct访问符号为. ,没有->
12345678910111213141516171819202122232425type N ...
内建容器 - map
基础和python的dict一样是无序的map使用hash表实现,所以key类型必须可以比较相等除了slice map function 的内建类型都可以作为keyStruct 不包括上面的类型就 ...