finally a proper use for sync.Once

This commit is contained in:
Jeff Carr 2025-09-03 14:04:47 -05:00
parent 98cc06ab8f
commit d981b93728
2 changed files with 22 additions and 23 deletions

43
init.go
View File

@ -23,9 +23,6 @@ func Default(opts ...OptionFunc) *Engine {
} }
*/ */
// todo: use initOnce
// cache.go has Do()
// f.initOnce.Do(f.initWork)
func Init() *Forge { func Init() *Forge {
f := InitPB() f := InitPB()
@ -162,25 +159,27 @@ func (f *Forge) RawInitPB() {
// try to NOT use the ENV settings anywhere but here // try to NOT use the ENV settings anywhere but here
// all initial ENV settings should be stored in the forge struct // all initial ENV settings should be stored in the forge struct
func (f *Forge) setenv() { func (f *Forge) setenv() {
if err := fhelp.ConfigureENV(); err != nil { f.once.Do(func() {
log.Info("forge ConfigureENV() failed", err) if err := fhelp.ConfigureENV(); err != nil {
os.Exit(-1) log.Info("forge ConfigureENV() failed", err)
} os.Exit(-1)
f.configDir = os.Getenv("FORGE_CONFIG") }
f.goSrc = os.Getenv("FORGE_GOSRC") f.configDir = os.Getenv("FORGE_CONFIG")
f.repoPB = os.Getenv("FORGE_REPOPB") f.goSrc = os.Getenv("FORGE_GOSRC")
f.forgeURL = os.Getenv("FORGE_URL") f.repoPB = os.Getenv("FORGE_REPOPB")
f.patchDir = os.Getenv("FORGE_PATCHDIR") f.forgeURL = os.Getenv("FORGE_URL")
if os.Getenv("FORGE_GOWORK") == "true" { f.patchDir = os.Getenv("FORGE_PATCHDIR")
f.goWork = true if os.Getenv("FORGE_GOWORK") == "true" {
} f.goWork = true
log.Printf("FORGE_CONFIG = %s\n", f.configDir) }
log.Printf("FORGE_GOSRC = %s\n", f.goSrc) log.Printf("FORGE_CONFIG = %s\n", f.configDir)
log.Printf("FORGE_GOWORK = %v\n", f.goWork) log.Printf("FORGE_GOSRC = %s\n", f.goSrc)
log.Printf("FORGE_REPOPB = %s\n", f.repoPB) log.Printf("FORGE_GOWORK = %v\n", f.goWork)
log.Printf("FORGE_URL = %s\n", f.forgeURL) log.Printf("FORGE_REPOPB = %s\n", f.repoPB)
log.Printf("FORGE_PATCHDIR = %s\n", f.patchDir) log.Printf("FORGE_URL = %s\n", f.forgeURL)
log.Printf("HOSTNAME = %s\n", os.Getenv("HOSTNAME")) log.Printf("FORGE_PATCHDIR = %s\n", f.patchDir)
log.Printf("HOSTNAME = %s\n", os.Getenv("HOSTNAME"))
})
} }
func (f *Forge) GetForgeURL() string { func (f *Forge) GetForgeURL() string {

View File

@ -10,7 +10,7 @@ import (
// maybe an interface someday? // maybe an interface someday?
type Forge struct { type Forge struct {
// one-time initialized data // one-time initialized data
initOnce sync.Once once sync.Once
initErr error // init error, if any initErr error // init error, if any
goSrc string // the path to go/src goSrc string // the path to go/src
repoPB string // the path to the repos.pb cache file repoPB string // the path to the repos.pb cache file