package
1.3.2
Repository: https://github.com/thinkeridea/go-extend.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# Structs

Once 是 sync.Once 的扩展实现,由于每次使用 sync.Once 都需要保存两个字段,一个是 sync.Once 的实例,一个是数据本身,这带来一些混乱 让 Once 自带数据保存,减少使用时需要定义多个字段,如果需要保存多个数据,可以使用 []interface{} 或者自定义 struct 以下是一个简单的示例: var db Once func DB() *mysql.Client{ return db.Do(f func() interface{}{ return mysql.NewClient(...) }).(*mysql.Client) } 当希望处理错误,可以响应 []interface{} 或者 自定义 struct, 如果在服务或程序初始化阶段可以考虑 panic 来报告错误,如下是使用 []interface{} 的示例: var db Once func DB() (*mysql.Client, error){ res := db.Do(f func() interface{}{ c, err:=mysql.NewClient(...) return []interface{}{c, err} }).([]interface{}) return res[0].(*mysql.Client), res[1].(error) } 使用该方法需要一些取舍,它简单实用,性能无限接近 sync.Once。.
OncePointer 性能方面略好于 Once,但不会有太大改善, 在某些场景下可以使用,更推荐使用 Once.