元数据 / 分组
最后更新于:2022-04-02 02:49:51
[TOC]
> [参考](https://books.studygolang.com/go-rpc-programming-guide/part3/metadata.html)
## 元数据
### 概述
元数据不是服务请求和服务响应的业务数据,而是一些辅助性的数据。
元数据是一个键值队的列表,键和值都是字符串, 类似`http.Header`。
### 实例
Client
如果你想在**客户端传给服务器**元数据, 你 必须 在上下文中设置 `share.ReqMetaDataKey`
如果你想在**客户端读取客户端**的数据, 你 必须 在上下文中设置 `share.ResMetaDataKey`
```
reply := &example.Reply{}
ctx := context.WithValue(context.Background(), share.ReqMetaDataKey, map[string]string{"aaa": "from client"})
ctx = context.WithValue(ctx, share.ResMetaDataKey, make(map[string]string))
err := xclient.Call(ctx, "Mul", args, reply)
```
Server
服务器可以从上下文读取`share.ReqMetaDataKey` 和 `share.ResMetaDataKey`:
```
// server.go
reqMeta := ctx.Value(share.ReqMetaDataKey).(map[string]string)
resMeta := ctx.Value(share.ResMetaDataKey).(map[string]string)
```
### 分组 gorup
> [参考](https://books.studygolang.com/go-rpc-programming-guide/part3/group.html)
`group`就是一个元数据。如果你为服务设置了设置`group`, 只有在这个`group`的客户端才能访问这些服务(这个限制是在路由的时候限制的, 当然你在客户端绕过这个限制)。
';