mirror of
https://github.com/nabbar/golib.git
synced 2025-12-24 11:51:02 +08:00
- gin: apply change following bumping gin (move value from interface{} to any, move key from string to any)
Package Database:
- gorm: removing clickhouse driver following cve and no update since publicated
Other:
- bump dependencies
context Package
The context package extends Go's standard context.Context with advanced configuration and management features. It provides generic, thread-safe context storage, context cloning, merging, and key-value management, making it easier to handle complex application state and configuration.
Features
- Generic context configuration with type-safe keys
- Thread-safe key-value storage and retrieval
- Context cloning and merging
- Walk and filter stored values
- Integration with Go's
context.Contextinterface
Main Types & Functions
- Config[T comparable]: Generic interface for context configuration and key-value management.
- MapManage[T]: Interface for map operations (load, store, delete, clean).
- FuncContext: Function type returning a
context.Context. - NewConfig: Create a new generic context configuration.
Example Usage
import "github.com/nabbar/golib/context"
type MyKey string
cfg := context.NewConfig[MyKey](nil)
cfg.Store("myKey", "myValue")
val, ok := cfg.Load("myKey")
Key Methods
SetContext(ctx FuncContext)Clone(ctx context.Context) Config[T]Merge(cfg Config[T]) boolWalk(fct FuncWalk[T]) boolLoadOrStore(key T, cfg interface{}) (val interface{}, loaded bool)Clean()
IsolateParent
Creates a new context with cancelation, isolated from the parent.
ctx := context.IsolateParent(parentCtx)
context/gin Subpackage
The context/gin subpackage provides a bridge between Go's context and the Gin web framework. It wraps Gin's Context to add context management, signal handling, and metadata utilities for HTTP request handling.
Features
- Wraps Gin's
Contextwith Go'scontext.Context - Signal-based cancellation (e.g., on OS signals)
- Key-value storage and retrieval for request-scoped data
- Type-safe getters for common types (string, int, bool, etc.)
- Integrated logging support
Main Types & Functions
- GinTonic: Interface combining
context.Contextand Gin'sContextwith extra helpers. - New: Create a new
GinToniccontext from a GinContextand logger.
Example Usage
import (
"github.com/nabbar/golib/context/gin"
"github.com/gin-gonic/gin"
"github.com/nabbar/golib/logger"
)
func handler(c *gin.Context) {
ctx := gin.New(c, logger.New(nil))
ctx.Set("userID", 123)
id := ctx.GetInt("userID")
// ...
}
Key Methods
Set(key string, value interface{})Get(key string) (value interface{}, exists bool)GetString(key string) stringCancelOnSignal(s ...os.Signal)SetLogger(log liblog.FuncLog)