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/


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM