今天我尝试使用上下文编程,代码如下:
package main
func main(){
ctx := context.Background()
ctx = context.WithValue(ctx,"appid","test111")
b.dosomething()
}
package b
func dosomething(ctx context.Context){
fmt.Println(ctx.Value("appid").(string))
}
然后我的程序崩溃了,我认为是因为这些ctx位于不同的程序包中
答案 0 :(得分:0)
我建议您仅在单个任务的生存期内使用上下文,并通过函数传递相同的上下文。 此外,您还应该了解在何处使用上下文以及仅在何处传递参数给函数。
另一个建议是使用自定义类型来设置上下文并从上下文中获取值。
根据上述所有内容,您的程序应如下所示:
package main
import (
"context"
"fmt"
)
type KeyMsg string
func main() {
ctx := context.WithValue(context.Background(), KeyMsg("msg"), "hello")
DoSomething(ctx)
}
// DoSomething accepts context value, retrieves message by KeyMsg and prints it.
func DoSomething(ctx context.Context) {
msg, ok := ctx.Value(KeyMsg("msg")).(string)
if !ok {
return
}
fmt.Println("got msg:", msg)
}
您可以将DoSomething函数移至另一个程序包中,并将其称为程序包名称。DoSomething不会改变任何内容。