Go語言中Once如何使用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)建站于2013年開始,先為橋東等服務(wù)建站,橋東等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為橋東企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。sync.Once是sync包中的一個對象,它只有一個方法Do,這個方法很特殊,在程序運(yùn)行過程中,無論被多少次調(diào)用,只會執(zhí)行一次。
1.適用場景:
在一個進(jìn)程之中,如果一個函數(shù)里面的一部分代碼,希望在很多協(xié)程都執(zhí)行的時候,只被執(zhí)行一次,那么Once便起到了作用。例如:初始化進(jìn)程中的共享內(nèi)存,它只希望被該進(jìn)程初始化一次,其他協(xié)程不需要初始化操作。
例子:
結(jié)果分析:
從上面的輸出結(jié)果可以看出,使用了once.Do之后,onceBody()函數(shù)中的代碼只被調(diào)用了一次。其他的協(xié)程依然還在運(yùn)行,但是并沒有去執(zhí)行onceBody()函數(shù)中的代碼。
2. 源碼如下所示:
Once的數(shù)據(jù)結(jié)構(gòu)和函數(shù)實(shí)現(xiàn)如下所示:
備注:巧妙之處,doSlow函數(shù)中,計數(shù)器done的自增操作是寫到了defer函數(shù)中,原因就是defer中的函數(shù)就算在panic的時候,也會被執(zhí)行,這樣就可以有效的避免panic的時候,Do函數(shù)的計數(shù)器失效,導(dǎo)致其他的協(xié)程會在調(diào)用一次f()中的代碼。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。