2023年来, Go的并发库又有了一些变化,这篇文章是对这些变换的综述。小细节的变化,比如typo、文档变化等无关大局的变化就不介绍了。sync.MapGo 1.21.0 中增加了和Once相关的三个函数,便于Once的使用。123funcOnceFunc(ffunc())func()funcOnceValue[T any](ffunc() T)func() TfuncOnceValues[T1, T2 any](ffunc() (T1, T2))func() (T1, T2)这三个函数的功能分别是:OnceFunc:返回一个函数g,多次调用这个函数g,只会执行一次f。 如果f执行时panic, 则后续调用这个函数g不会再执行f,但是每次调用都会panic。OnceValue:返回一个函数g,多次调用这个函数g,只会执行一次f,函数g返回值类型是T。比上一个g多了一个返回值。panic原理同上。OnceValues:返回一个函数g,多次调用这个函数g,只会执行一次f,函数g返回值类型是(T1, T2)。比上一个g又多了一个返回值。panic原理同上。当然理论上你还可以增加更多的函数,返回更多的返回值,因为Go没有Tuple类型,所以这里还不能简化函数g的返回值为Tuple类型。反正Go 1.21.0就只增加了这三个函数。这个有什么好处呢?先前我们使用sync.Once的时候,比如初
...
继续阅读
(73)