A nicer implementation of sync.Once

Doesnt require storing the result of the function in a dedicated global
variable with a dedicated getter function
This commit is contained in:
Kovid Goyal
2023-02-21 20:24:07 +05:30
parent fbaaca1be9
commit 6f4d89045a
2 changed files with 59 additions and 0 deletions

24
tools/utils/once_test.go Normal file
View File

@@ -0,0 +1,24 @@
// License: GPLv3 Copyright: 2023, Kovid Goyal, <kovid at kovidgoyal.net>
package utils
import (
"fmt"
"testing"
)
var _ = fmt.Print
func TestOnce(t *testing.T) {
num := 0
var G = (&Once[string]{Run: func() string {
num++
return fmt.Sprintf("%d", num)
}}).Get
G()
G()
G()
if num != 1 {
t.Fatalf("num unexpectedly: %d", num)
}
}