time.Now的mock问题
在使用bytedance/mockey: a simple and easy-to-use golang mock library (github.com)mockey的时候,可能会根据需要,对time.Now()函数进行mock。
Mock(time.Now).Return(date.Of(2021, 1, 1)).Build()
然而对系统的time.Now进行mock,可能由于一些比较深奥的原因,出现各种异常问题,比如运行的时候返回
fatal error: semacquire not on the G stack
经过很多尝试和研究,最后发现解决方法是不用它这个Mock函数对time.Now进行操作
而是在业务代码中 把 time.Now()的使用进行调整,改为
var now = time.Now
在单测中,直接修改now为自己想要的时间即可
now = func() time.Time { return date.Of(2021, 1, 1) }
-race参数的使用
go test的时候增加参数--race
如果是业务代码,被-race发现了,可以认为是防患于未然,一旦发生线上问题,很难排查
如果是单测代码,可以在go test的参数里去掉-race,假装看不见(doge