在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())
    }
}