Files
nofx/bootstrap/context.go
Shui 179e5c69bf fix(bootstrap module): add bootstrap module to meet future function (#674)
* fix(bootstrap module): add bootstrap module to meet future function

* Fix readme

* Fix panic because log.logger is nil

* fix import

---------

Co-authored-by: zbhan <zbhan@freewheel.tv>
2025-11-07 10:53:10 +08:00

50 lines
1.0 KiB
Go

package bootstrap
import (
"context"
"fmt"
"nofx/config"
"sync"
)
// Context 初始化上下文,用于在钩子之间传递数据
type Context struct {
Config *config.Config
Data map[string]interface{} // 存储模块之间共享的数据(如数据库实例)
ctx context.Context
mu sync.RWMutex
}
// NewContext 创建新的初始化上下文
func NewContext(cfg *config.Config) *Context {
return &Context{
Config: cfg,
Data: make(map[string]interface{}),
ctx: context.Background(),
}
}
// Set 存储数据到上下文
func (c *Context) Set(key string, value interface{}) {
c.mu.Lock()
defer c.mu.Unlock()
c.Data[key] = value
}
// Get 从上下文获取数据
func (c *Context) Get(key string) (interface{}, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
val, ok := c.Data[key]
return val, ok
}
// MustGet 从上下文获取数据,不存在则 panic
func (c *Context) MustGet(key string) interface{} {
val, ok := c.Get(key)
if !ok {
panic(fmt.Sprintf("context key '%s' not found", key))
}
return val
}