In Go, the sync.Once
type is used to ensure that a particular piece of code is only executed once, making it perfect for initializing resources like configuration settings, database connections, or any other startup tasks. It's especially useful in concurrent programming scenarios where multiple goroutines might attempt to execute initialization code simultaneously.
package main
import (
"fmt"
"sync"
)
var once sync.Once
var instance *Config
type Config struct {
// Add your config fields here
DBName string
}
func GetConfig() *Config {
once.Do(func() {
instance = &Config{
DBName: "my_database",
}
})
return instance
}
func main() {
config := GetConfig()
fmt.Println(config.DBName)
}
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?