-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: update readme with usage and description
Signed-off-by: m-murad <murad.kuka@gmail.com>
- Loading branch information
Showing
1 changed file
with
43 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,44 @@ | ||
## once | ||
## 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 `DoAgain()` 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.DoAgain() 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.DoAgain() will not execute the function. | ||
o.DoAgain(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 DoAgain() after this. | ||
// Calls to Do() and DoAgain() 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 | ||
} | ||
``` |