打赏

golang context携带值传递

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/

posted @ 2021-05-20 13:12  苍山落暮  阅读(2386)  评论(0)    收藏  举报