【学到一个小技巧】context.WithValue 中的 key 可以是个空对象

发布时间 2023-09-29 11:46:20作者: ahfuzhang

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


从 netpoll 库看到这段代码:

type connkey struct{}

var ctxkey connkey

func prepare(conn netpoll.Connection) context.Context {
	mc := newSvrMuxConn(conn)
	ctx := context.WithValue(context.Background(), ctxkey, mc)  // 这个技巧很酷. 以前我都只知道写字符串
	return ctx
}

func handle(ctx context.Context, conn netpoll.Connection) (err error) {
	mc := ctx.Value(ctxkey).(*svrMuxConn)
    //....
}