golang语言工程 |青训营笔记

73 阅读2分钟
单元测试:
单元测试的规则:
所有测试文件以——test.go结尾

测试函数规范:func TestXxx(*testing.T

初始化逻辑放到TestMain中
  1. 单元测试:Mock
  • 函数地址:monkey : github.com/bouk/monkey
  • patch:patch(target,reolacement interface{})*PatchGuard{}
  • target:原函数 replacement:打桩函数
  • unpatch来取消打桩
  • 功能:不需要依赖本地文件,随时可以运行

单元测试常用包 开源:assert: 比如:assert.Equal(),判断是否相等

  1. 提高单元测试覆盖率方法: 测试分支相互独立、全面覆盖:基于分支去写单元测试,可以保证单元测试被全面覆盖 测试单元粒度足够小,函数功能单一

go mod 项目中的常用工具: go mod :

  • init //初始化,创建go.mod文件
  • download //下载模块到本地缓存
  • tidy //增加需要的依赖,删除不需要的依赖
  1. fastrand随机比rand速度快,在高并发情况下建议用fastrand,这个包在github;是因为rand为了保证并发和全局的随机性,加了锁,所以性能下降

  2. 逐行读取,bufio.Scanner

  • bufio.NewScanner 用法: 使用短变量声明创建 bufio.NewScanner 类型的变量 input : input := bufio.NewScanner(os.Stdin) 该变量从程序的标准输入中读取内容。在该变量上调用方法:

每次调用 input.Scan(),即 读入下一行 ,并移除行末的换行符。 读取的内容可以调用 input.Text() 得到。Scan函数在读到一行时返回true,不再有输入时返回false。

每行有最大限制65536;超过的话就会报错,scanner里有err方法,返回错误 ReadLine会尽量去读取并返回完整的一行,但是如果行太长缓冲区满了的话,就不会返回完整的一行而是返回缓冲区里面的内容,并且会设置isPrefix为true;这时候需要继续调用ReadLine直到将完整一行读完,然后外层调用程序需要将这些块拼起来才能组成完整的行。不仅要处理isPrefix,还要处理前缀,太麻烦!除非我们主动设置缓冲区大小,但是前提是你必须知道最长行的长度,大多数情况下这个是无法提前预知的

ReadString是调用的ReadBytes,且ReadBytes已经将缓冲区大小的问题解决了

readString的坑在于一定要做好分隔符的标示,如果你的文件文件中写的是"a\nb\nc\nd",使用ReadString的时候会漏掉d的输出,但是在最后一个line里面还有有数据的,所以需要自己手动的判断一下 详细可见博主:juejin.cn/post/684490…