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()
}
相关链接
    
【励志篇】:
古之成大事掌大学问者,不惟有超世之才,亦必有坚韧不拔之志。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号