go - 可以将字节切片转换为上下文吗?
问题描述
我有一个使用来自 beanstalkd 的消息的应用程序。您不能将上下文传递给 beanstalkd,您只能使用字节切片来发送消息。所以我将我的上下文转换为字节片。
要从传递的上下文传播,需要将其转换为 context.Context。这可能吗?
// Sending context
ctx := context.Background()
reqBodyBytes := new(bytes.Buffer)
json.NewEncoder(reqBodyBytes).Encode(ctx)
_, err = conn.Put(reqBodyBytes.Bytes(), 1, 0, 120*time.Second)
// Consuming context
_, body, err := conn.Reserve(120 * time.Second)
fmt.Println(string(body))
解决方案
一般来说,这是不可能的。context.Context
是一个接口,标准库提供的实现不支持封送值。例如,返回将键值对存储在未导出字段中context.WithValue()
的上下文实现(未导出类型)。*context.valueCtx
但由于它是一种接口类型,您可以提供确实提供编组和解组功能的实现。Context.Value()
尽管如果您也想支持上下文的方法,您可能会在编组和解组任何类型的值时遇到困难。
一般来说,这不是一个好主意。Acontext.Context
的意思是“在 API 边界和进程之间携带截止日期、取消信号和其他请求范围的值”。这不是你想要坚持/转移的东西。
推荐阅读
- python - 是否可以在 python Turtle 中更改海龟的大小?
- ms-access - 使用 Button 更改值 - Access
- javascript - 将 Jest 导入常规文件
- python - 如何在我的 WSL 中将 python3 设置为 VSCode 中的解释器?
- c# - Player doing small forward movements when hes shooting
- mysql - 如何有效地从与表 B 连接且表 A 具有删除后触发器的表 A 中删除?
- c# - 如何防止点-多边形滑动碰撞检测中的浮点错误
- r - 在 R 中的 ggplot、geom_bar 图表的底部添加统计表
- angular - 如何在 Angular 获取请求中将字符串值发送到后端
- r - Blogdown:如何处理图像路径?