mirror of
https://github.com/nabbar/golib.git
synced 2025-09-26 20:01:15 +08:00

- Add some README file to give missing documentations or update existing documentation file Package Archive: - Add some comments to godoc information - Moving NopWriterCloser interface to ioutils package Package IOUtils: - New package NopWriterCloser to implement interfac like NopReader Package Database: - KVMap: fix missing function following update of kvdriver Package Duration: - Rename BDD testing Package Context/Gin: - Moving function New between model & interface file Package AWS: - rework Walk function to use more generic with standard walk caller function - func walk will now no more return and include error (can be catched into the given func) - func walk will now return a bool to continue or stop the loop - func walk with many input function will now stop when all given function return false - func walk will now return error only about main process and not given function Package errors: - Add interface error into interface Error Package IOUtils: - Moving IOWrapper as subPackage and optimize process + allow thread safe
2.6 KiB
2.6 KiB
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.Context
interface
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]) bool
Walk(fct FuncWalk[T]) bool
LoadOrStore(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
Context
with 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.Context
and Gin'sContext
with extra helpers. - New: Create a new
GinTonic
context from a GinContext
and 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) string
CancelOnSignal(s ...os.Signal)
SetLogger(log liblog.FuncLog)