ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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`的客户端才能访问这些服务(这个限制是在路由的时候限制的, 当然你在客户端绕过这个限制)。