小天管理 发表于 2024年9月27日 发表于 2024年9月27日 场景:某些情况存入 ctx 的类型是这个 ctx 链路上唯一的 那么没有必要再单独定义 key 了(我超级怕麻烦) package gctx import ( "context" "fmt" "reflect" ) type body[T any] struct { Value T } type typeKey[T any] struct { } func Put[T any](ctx context.Context, value T) context.Context { key := typeKey[body[T]]{} return context.WithValue(ctx, key, body[T]{Value: value}) } func Get[T any](ctx context.Context) (T, error) { key := typeKey[body[T]]{} value, ok := ctx.Value(key).(body[T]) if !ok { var zero T return zero, errors.New("not found") } return value.Value, nil }
已推荐帖子