]> 127.0.0.1 Git - part/.git/commitdiff
1 v0.28.0+202311070b46ed1
authorqydysky <qydysky@foxmail.com>
Tue, 7 Nov 2023 15:58:21 +0000 (23:58 +0800)
committerqydysky <qydysky@foxmail.com>
Tue, 7 Nov 2023 15:58:21 +0000 (23:58 +0800)
ctx/Ctx.go
ctx/Ctx_test.go

index c88caa522d82b61e8736dfd5a4a6102cec3397f9..dc840691ab227cac98b6b9bf424c8c8ee009c6a7 100644 (file)
@@ -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("")
+       }
+}
index 2d255aadb515c3a64f43ea7b49811b0b64384c31..8b9706a8bc4ef13ab0bcb705e85a1cd34d8d28a6 100644 (file)
@@ -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()
+       }
+}