golang中的sync.once
生活随笔
收集整理的这篇文章主要介绍了
golang中的sync.once
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
sync.Once.Do(f func())是一个挺有趣的东西,能保证once只执行一次,无论你是否更换once.Do(xx)这里的方法,这个sync.Once块只会执行一次
与sync.WaitGroup类型一样,sync.Once类型也属于结构体类型,同样也是开箱即用和并发安全的。由于这
个类型中包含了一个sync.Mutex类型的字段,所以,复制该类型的值也会导致功能的失效。
Once类型的Do方法只接受一个参数,这个参数的类型必须是func(),即:无参数声明和结果声明的函数。
package mainimport ("fmt""sync""time" )func onces() {fmt.Println("onces") }func onced() {fmt.Println("onced") }var once sync.Oncefunc main() {for i, v := range make([]string, 10) {once.Do(onces)fmt.Println("count: ", v, "---", i)}for i := 0; i < 10; i++ {go func() {once.Do(onced)fmt.Println("213")}()}time.Sleep(4000) }输出
onces count: --- 0 count: --- 1 count: --- 2 count: --- 3 count: --- 4 count: --- 5 count: --- 6 count: --- 7 count: --- 8 count: --- 9 213光会用是不够的,再来看下sync.once的实现原理
源码:
总结
以上是生活随笔为你收集整理的golang中的sync.once的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: golang对象池
- 下一篇: golang中的socket