跳转到内容
彼岸论坛
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[Go 编程语言] 分享:泛型+context 自动根据类型生成 ctx key


已推荐帖子

发表于

场景:某些情况存入 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
}

  • 游客注册

    游客注册

  • 会员

    没有会员可显示

  • 最新的状态更新

    没有最新的状态更新
  • 最近查看

    • 没有会员查看此页面.
×
×
  • 创建新的...