golang小坑集锦

收录一些golang的小坑,虽然都是之前知道的东西,但是坑就是坑,不自己踩真的不会知道。

  1. 在给结构体绑定方法的时候例如func (a A) f1(),func(a A)f2(),虽然说golang弱化了指针的概念但是func(a A)f1(),func(a A)f2()还是有很大差别的,首先来说就是第一种方式其实是传给了f1一个a的副本,不能修改a,效率方面应该也是会有不同,这个没有测试,只是猜测,还有一种情况必须使用第二种方法,就是f1 f2都是goroutine他们之间通过变量交互,比如f1负责修改a的某个变量,f2则负责根据变量轮训之类的操作,这种情况下也必须使用
  2. golang的chan在使用过程中遇到一个坑,就是在make的时候忘记加长度参数,这样没有编译错误因为make是支持不指定的方式,但是这样的问题是这个chan就变成了同步的通道,这样在使用这个通道的时候即便是往里面写数据都会卡主。另外同样是1里面所说的样子,如果两个goroutine使用chan交互,如果不是使用指针的方法,那么chan也有可能被生产者写满而worker实际上一直在另外一个空chan里面取任务