go - Context.Value(key interface{}) interface{} 是如何工作的?

标签 go

请看下面的代码

import (
    ...
    "context"
    ...
)

type myStruct struct {
    ID  string
    Sig string
}

mySig := myStruct{
    ID:  "12345678",
    Sig: "Secret_Signature_Token",
}

// Setting a Value associated with a Key in Context
_ := context.WithValue(ctx, "myKey", &mySig)           -- 1

//Getting the same value
value, ok := ctx.Value("myKey").(*myStruct)            -- 2

现在,我的问题是:上面表达式 2 中 .(*myStruct) 的用途/含义是什么 有人可以逐步解释第 2 条语句吗。

最佳答案

ctx.Value("myKey") 返回一个接口(interface)。所以 .(*myStruct) 进行了类型断言,将其转换为 *myStruct 类型。因此,左侧的 value*myStruct 类型,您可以访问它的字段,例如值.ID

可以在这里看到您的示例的一个版本:https://play.golang.org/p/Eg0v3vuSi6y

关于go - Context.Value(key interface{}) interface{} 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53498988/

相关文章:

Golang 在 goroutine 之间共享大量数据

mongodb - 我应该保留什么 setLimit(int64) 方法来显示 Collections 中的所有记录

轮类次数太大

go - cgo - 在 MacOSX 中找不到 'runtime.h' 文件

html-parsing - 我如何获取 html.Node 的内容

go - HTTP : server gave HTTP response to HTTPS client

go - 使用模型数组中的选项渲染 SelectTag()

google-app-engine - 如何将 TestMain 与全局 aetest.NewInstance 一起使用

amazon-web-services - 如何从 ALB OIDC session 注销?

amazon-web-services - Golang 在 AWS 中重定向到 HTTPS