在Go语言开发中,测试并发代码一直是个挑战。传统的并发测试经常会出现随机失败的情况,让开发者头疼不已。
下面来介绍Go 1.25中的新特性——testing/synctest库,它将彻底解决这个问题。
先看一个简单的测试例子:
func TestSharedValue(t *testing.T) {
var shared atomic.Int64
go func() {
shared.Store(1)
time.Sleep(1 * time.Microsecond)
shared.Store(2)
}()
time.Sleep(5 * time.Microsecond)
if shared.Load() != 2 {
t.Errorf("shared = %d, want 2", shared.Load())
}
}