溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言中Once如何使用

發(fā)布時間:2021-08-13 16:14:45 來源:億速云 閱讀:133 作者:Leah 欄目:數據庫

Go語言中Once如何使用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

sync.Once是sync包中的一個對象,它只有一個方法Do,這個方法很特殊,在程序運行過程中,無論被多少次調用,只會執(zhí)行一次。

1.適用場景:

在一個進程之中,如果一個函數里面的一部分代碼,希望在很多協(xié)程都執(zhí)行的時候,只被執(zhí)行一次,那么Once便起到了作用。例如:初始化進程中的共享內存,它只希望被該進程初始化一次,其他協(xié)程不需要初始化操作。

例子:

結果分析:

從上面的輸出結果可以看出,使用了once.Do之后,onceBody()函數中的代碼只被調用了一次。其他的協(xié)程依然還在運行,但是并沒有去執(zhí)行onceBody()函數中的代碼。

2. 源碼如下所示:

Once的數據結構和函數實現如下所示:

備注:巧妙之處,doSlow函數中,計數器done的自增操作是寫到了defer函數中,原因就是defer中的函數就算在panic的時候,也會被執(zhí)行,這樣就可以有效的避免panic的時候,Do函數的計數器失效,導致其他的協(xié)程會在調用一次f()中的代碼。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI