为了账号安全,请及时绑定邮箱和手机立即绑定

context 在使用 Value(key) 后返回 nil 接口

context 在使用 Value(key) 后返回 nil 接口

Go
吃鸡游戏 2023-06-12 15:27:38
我有一个 ctx (context.Context) 变量,它的值为:ctx = context.Background.WithCancel.WithCancel.WithValue(peer.peerKey{}, &peer.Peer{Addr:(*net.UnixAddr)(0xc000270820), AuthInfo:credentials.AuthInfo(nil)}).WithValue(metadata.mdIncomingKey{}, metadata.MD{":authority":[]string{"unix:///run/containerd/containerd.sock"}, "content-type":[]string{"application/grpc"}, "user-agent":[]string{"grpc-go/1.12.0"}, "containerd-lease":[]string{"615343279-BvIN"}, "containerd-namespace":[]string{"default"}}).WithValue(grpc.streamKey{}, <stream: 0xc00026af00, /containerd.services.content.v1.Content/Write>).WithValue(log.loggerKey{}, &logrus.Entry{Logger:(*logrus.Logger)(0xc0000b0180), Data:logrus.Fields{"ref":"config-sha256:bc8fb6e6e49dac415b320f3ce41fa4f6335a4526fccd4e97c64bcbdfca280ba5", "total":1512, "expected":"sha256:bc8fb6e6e49dac415b320f3ce41fa4f6335a4526fccd4e97c64bcbdfca280ba5"}, Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, Level:0x0, Caller:(*runtime.Frame)(nil), Message:"", Buffer:(*bytes.Buffer)(nil), err:""})正如您在此处看到的,有一个数据字段,其中包含一些其他值。我想提取数据字段中的ref值和expected值。我试着把它们放在外地Value(),但我总是没有。知道如何获得这些价值吗?据我了解loggerKey{}是这里的关键,所以我也尝试将数据取出loggerKey{},但它仍然说接口是空的。logger := ctx.Value(loggerKey{}).(*logrus.Entry)打印记录器抛出错误:panic: interface conversion: interface {} is nil, not *logrus.Entry不确定,为什么接口在这里为零。TIA。
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

弄清楚了。我使用 loggerKey{} 作为键,而实际键是 log.loggerKey{}。我必须导入日志,然后它才起作用。



查看完整回答
反对 回复 2023-06-12
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信