GRPC 的 metadata
客户端发送
func main() { conn,err := grpc.Dial(":50052",grpc.WithInsecure()) if err != nil { panic(err) } defer conn.Close() c := proto.NewGreeterClient(conn) // 创建metadata // 第一种方式 md := metadata.New(map[string]string{ "key1":"val1", "key2":"val2", }) // 第二种方式 md = metadata.Pairs( "key1","val1", "key2","val2", ) // 发送 metadata // 创建带有meta的context ctx := metadata.NewOutgoingContext(context.Background(),md) // 将 ctx 代替原 context.Background() res,_ := c.SayHello(ctx,&proto.StreamReqData{Data: "hi"}) fmt.Println(res) }
服务端获取
func (s *server) SayHello (ctx context.Context, in *proto.StreamReqData) (*proto.StreamResData, error) { md, _ := metadata.FromIncomingContext(ctx) if md != nil { // 接收所有metadata fmt.Println(md) // 循环输出 for key,val := range md { fmt.Println(key,val) } // 只取里面的key1 if nameSlice,ok := md["key1"]; ok { for _,val := range nameSlice { fmt.Println(val) } } } return &proto.StreamResData{Data: "你好"},nil }

浙公网安备 33010602011771号