golang context携带值传递
package main
import (
"context"
"fmt"
"google.golang.org/grpc/metadata"
)
// 使用context.WithValue()和Value()方法获取值
func GetContextValue() {
type key = struct{}
ctx := context.Background()
ctx = context.WithValue(ctx, key{}, "this is value")
fmt.Printf("value: %v\n", ctx.Value(key{}))
}
// 使用了metadata.NewOutgoingContext传递数据,metadata.FromIncomingContext获取数据。
func GetContextWithMeta() {
// client
md := metadata.Pairs(
"k1", "v1",
"k2", "v2",
)
ctx := metadata.NewOutgoingContext(context.Background(), md)
// server
md2, ok := metadata.FromIncomingContext(ctx)
if !ok {
panic("no metadata")
}
fmt.Printf("k1 %v\n", md2["k1"])
fmt.Printf("k2 %v\n", md2["k2"])
}
func main() {
GetContextValue()
GetContextWithMeta()
}
相关链接
https://chyroc.cn/posts/golang-context-i/