登录
首页 >  Golang >  Go问答

是否可以将字节切片转换为上下文?

来源:stackoverflow

时间:2024-04-18 08:18:34 326浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《是否可以将字节切片转换为上下文?》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我有一个使用来自 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() 方法,则在编组和解组任何类型的值时可能会遇到困难。

总的来说,这不是一个好主意。 context.Context 旨在“跨 API 边界和进程之间携带截止日期、取消信号和其他请求范围的值”。这不是您想要保留/转移的东西。

好了,本文到此结束,带大家了解了《是否可以将字节切片转换为上下文?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>