上下文使用值(键)后返回零接口

  • 本文关键字:返回 接口 上下文 go
  • 更新时间 :
  • 英文 :


我有一个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:bc8fb6e6e49dac415b320f3ce41fa4f6335a4526fccd4e97c64bcbdf
ca280ba5"}, 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{}取出数据,但是它仍然说界面是NILL。

logger := ctx.Value(loggerKey{}).(*logrus.Entry)

打印记录器给我带来了错误:

panic: interface conversion: interface {} is nil, not *logrus.Entry

不确定,为什么在此处无需界面。tia。

弄清楚了。我将Loggerkey {}用作密钥,而实际键是log.loggerkey {}。我必须导入日志,然后起作用。

最新更新