https://github.com/m-murad/sync-once
package to call sync.Once again or reset it if need be.
https://github.com/m-murad/sync-once
go golang once once-do sync sync-once
Last synced: 14 days ago
JSON representation
package to call sync.Once again or reset it if need be.
- Host: GitHub
- URL: https://github.com/m-murad/sync-once
- Owner: m-murad
- License: apache-2.0
- Created: 2020-07-22T08:50:33.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-09-28T11:03:28.000Z (about 2 years ago)
- Last Synced: 2025-04-03T17:13:50.065Z (6 months ago)
- Topics: go, golang, once, once-do, sync, sync-once
- Language: Go
- Homepage:
- Size: 8.79 KB
- Stars: 2
- Watchers: 0
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
## sync-once
sync-once is similar to [sync.Once](https://golang.org/pkg/sync/#Once) of the standard library.
It also has struct `Once` but has two additional methods `DoForce()` and `Reset()`.
### why
While writing a web application I needed to reload configurations that were calculated using sync.Once.
But `sync.Once` provide a single method `Do()` that executes the function only once.
To get around this I wrote this package.
### usage
```
import (
sync "github.com/m-murad/sync-once"
)func main() {
o := new(sync.Once)
// This will work similar to the Once.Do(f) method of the sync package. The function f is only called once
o.Do(loadConfig())// To call the function either for the first time or again you need to use the sync.DoForce() method
// This will execute irrespective of weather o.Do() was called earlier or not and mark o (Once) as done.
// Call to o.Do() after o.DoForce() will not execute the function.
o.DoForce(loadConfig())// To reset o (sync.Once) you need to call the Reset() method.
// This will mark o as not executed but will no call the Do() method. You need to call Do() or DoForce() after this.
// Calls to Do() and DoForce() after this will work as described above.
o.Reset()}
// load config from a static file or any other operation that is usually performed only once
func loadConfig() {
// Do the work here
}
```