From 0b46ed11d19c53edf2611ab15e8888bbdc06c3a8 Mon Sep 17 00:00:00 2001 From: qydysky Date: Tue, 7 Nov 2023 23:58:21 +0800 Subject: [PATCH] 1 --- ctx/Ctx.go | 24 ++++++++++++++++++++++++ ctx/Ctx_test.go | 10 ++++++++++ 2 files changed, 34 insertions(+) diff --git a/ctx/Ctx.go b/ctx/Ctx.go index c88caa5..dc84069 100644 --- a/ctx/Ctx.go +++ b/ctx/Ctx.go @@ -100,3 +100,27 @@ func Done(ctx context.Context) bool { } return false } + +type Value[T any] struct { + data T +} + +func (t *Value[T]) get() T { + return t.data +} + +func (t *Value[T]) set(data T) { + t.data = data +} + +func (t *Value[T]) linkCtx(ctx context.Context) context.Context { + return context.WithValue(ctx, t, t) +} + +func putVal[T any](ctx context.Context, key *Value[T], v T) { + if pt, ok := ctx.Value(key).(*Value[T]); ok { + pt.set(v) + } else { + panic("") + } +} diff --git a/ctx/Ctx_test.go b/ctx/Ctx_test.go index 2d255aa..8b9706a 100644 --- a/ctx/Ctx_test.go +++ b/ctx/Ctx_test.go @@ -56,3 +56,13 @@ func TestMain2(t *testing.T) { t.Fatal() } } + +func TestMain3(t *testing.T) { + ctx := context.Background() + val := Value[error]{} + ctx = val.linkCtx(ctx) + putVal(ctx, &val, errors.New("aaa")) + if val.get().Error() != "aaa" { + t.Fatal() + } +} -- 2.39.2