You can switch an active configuration using atomic.Value, after initializing it with a Once. If your config is not initialized, atomic.Value will not block others.
On Mon, Nov 25, 2024 at 1:05 AM 'Hartmut Wieselburger' via golang-nuts <golang-nuts@googlegroups.com> wrote: > > Ok, thanks, once means once. So https://pkg.go.dev/sync/atomic#Value seems to > be a better fit, do you agree? > > burak serdar schrieb am Freitag, 22. November 2024 um 16:10:00 UTC+1: >> >> On Fri, Nov 22, 2024 at 1:53 AM 'Hartmut Wieselburger' via golang-nuts >> <golan...@googlegroups.com> wrote: >> > >> > var configOnce sync.Once >> > func Reset() { >> > configOnce = sync.Once{} >> > } >> >> This is not resetting. You are creating a new sync.Once and assigning >> that to a variable. That variable, configOnce, is shared among >> multiple goroutines, because that is what Once is used for, to limit >> the execution of a function called by multiple goroutines to a single >> execution. The Reset function sets this shared variable without any >> synchronization, so this is a data race. >> >> Also note that reassigning a Once instance like this may not behave as >> you expect. Any goroutine that is waiting on that Once instance will >> continue waiting until the Once function is done. The behavior of a >> goroutine that reads Once after Reset() is undefined. Since there is a >> data race, there is no guarantee on which instance of Once another >> goroutine will see. A goroutine may see the completed instance of Once >> even after you Reset() it. >> >> > >> > func Load() *Config { >> > configOnce.Do(func() { >> > ... >> > } >> > >> > burak serdar schrieb am Donnerstag, 21. November 2024 um 21:24:40 UTC+1: >> >> >> >> On Thu, Nov 21, 2024 at 1:14 PM 'Hartmut Wieselburger' via golang-nuts >> >> <golan...@googlegroups.com> wrote: >> >> > >> >> > Hi, >> >> > is there a way to reset sync.OnceValue(s), as you can do it with >> >> > sync.Once? >> >> >> >> How can you reset a sync.Once? >> >> >> >> > A common use case is loading a config. I would like to switch from >> >> > sync.Once to sync.OnceValue, but I need to a chance to reload my >> >> > config, without restarting my service. >> >> > If this is possible with sync.OnceValue, please let me know. Otherwise >> >> > the new OnceValue(s) are useless for me. >> >> > >> >> > Regards, Harti >> >> > >> >> > -- >> >> > You received this message because you are subscribed to the Google >> >> > Groups "golang-nuts" group. >> >> > To unsubscribe from this group and stop receiving emails from it, send >> >> > an email to golang-nuts...@googlegroups.com. >> >> > To view this discussion visit >> >> > https://groups.google.com/d/msgid/golang-nuts/46b4a4ff-18cd-494a-9ac0-3a40cf2074e2n%40googlegroups.com. >> > >> > -- >> > You received this message because you are subscribed to the Google Groups >> > "golang-nuts" group. >> > To unsubscribe from this group and stop receiving emails from it, send an >> > email to golang-nuts...@googlegroups.com. >> > To view this discussion visit >> > https://groups.google.com/d/msgid/golang-nuts/f3df358a-d4ae-441c-9ff6-30af9ad1c568n%40googlegroups.com. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion visit > https://groups.google.com/d/msgid/golang-nuts/0479f342-0b35-49b4-be81-c631bfe15900n%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/CAMV2Rqq2qmz%2Bn_6CX14JRGtNEMe%3DvMt4%2B23ss5-W-QogHyzzyg%40mail.gmail.com.