@
lrh3321 依然可用 直接存 只是要注意 存进去时的类型 一定要是 Logger
```
package gctx
import (
"context"
"log"
"testing"
)
// MockLogger 是一个实现 Logger 接口的模拟结构体
type MockLogger struct {
lastMessage any
}
func (m *MockLogger) Info(msg any) {
log.Println("MockLogger:", msg)
m.lastMessage = msg
}
type Logger interface {
Info(msg any)
}
func TestLoggerContextStorage(t *testing.T) {
// 创建一个基础 context
ctx := context.Background()
// 创建一个 MockLogger 实例
logger := &MockLogger{}
// 将 logger 存储到 context 中
ctx = Put(ctx, Logger(logger))
// 从 context 中检索 logger
retrievedLogger, err := Get[Logger](ctx)
if err != nil {
t.Fatalf("Failed to retrieve logger from context: %v", err)
}
retrievedLogger.Info("Test log message")
// 检查检索到的 logger 是否是原始 logger
if retrievedLogger != logger {
t.Errorf("Retrieved logger is not the same as the original logger")
}
// 使用检索到的 logger
testMessage := "Test log message"
retrievedLogger.Info(testMessage)
// 验证消息是否正确记录
if logger.lastMessage != testMessage {
t.Errorf("Expected last message to be %q, but got %q", testMessage, logger.lastMessage)
}
// 测试检索不存在的类型
_, err = Get[string](ctx)
if err == nil {
t.Error("Expected error when retrieving non-existent type, but got nil")
}
}
```