| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | 
							- package main
 
- import (
 
- 	"context"
 
- 	"fmt"
 
- 	"sync"
 
- )
 
- type MyContext struct {
 
- 	ctx context.Context
 
- 	m sync.Map
 
- }
 
- func (m * MyContext) WithValue(parent MyContext, key, val interface{}) MyContext {
 
- 	//ctx := m.WithValue(parent,key,val)
 
- 	ctx := new(MyContext)
 
- 	ctx.ctx =context.WithValue(parent.ctx,key,val)
 
- 	m.m.Store(key,val)
 
- 	ctx.m = m.m
 
- 	return *ctx
 
- }
 
- func (m * MyContext) Value( key interface{}) interface{}{
 
- 	val ,_ :=m.m.Load(key)
 
- 	return val
 
- }
 
- func NewMyContext() MyContext{
 
-    mc := MyContext{
 
- 	   ctx : context.Background(),
 
-    }
 
- 	return mc
 
- }
 
- func main() {
 
- 	mc := NewMyContext()
 
- 	ctx :=mc.WithValue(mc,"key1","value1")
 
- 	ctx1 :=mc.WithValue(ctx,"key2","value2")
 
- 	fmt.Println(ctx.Value("key2"),ctx1.Value("key2"))
 
- }
 
 
  |