Skip to content

Commit

Permalink
docs: update readme with usage and description
Browse files Browse the repository at this point in the history
Signed-off-by: m-murad <murad.kuka@gmail.com>
  • Loading branch information
m-murad committed Jul 22, 2020
1 parent b6ccc92 commit d1a91ef
Showing 1 changed file with 43 additions and 1 deletion.
44 changes: 43 additions & 1 deletion readme.md
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
}
```

0 comments on commit d1a91ef

Please sign in to comment.