go~context的Value的建议写法

devtools/2025/3/20 3:13:20/

context.Context 是 Go 标准库中用于在不同的函数调用和 goroutine 之间传递请求数据、取消信号以及截止时间等信息的机制。通过 context.WithValue 函数,可以将键值对存储在 Context 中,然后在后续的函数调用中通过 Context.Value 方法来获取这些值。

在 Go 语言里,为了利用 context.Context 来安全地传递和存储特定类型的数据,同时避免键冲突,必须要使用自定义类型作为键

避免键冲突

在多个包或者不同的代码模块中,可能会使用 context.WithValue 来存储不同的数据。如果使用基本数据类型(如 string)作为键,很容易出现键冲突的问题。例如,不同的包可能都使用 “sendType” 作为键来存储不同的数据,这样就会导致数据覆盖或者混乱。

而自定义一个空结构体类型 sendTypeKey 作为键,由于每个自定义类型在 Go 中都是唯一的,所以可以确保键的唯一性,避免了键冲突的问题。

类型安全

使用自定义类型作为键,在获取值时可以进行类型断言,确保获取到的数据类型是正确的

建议写法

type sendType stringfunc (m sendType) String() string {return string(m)
}const (normalSend sendType = "normal"batchSend  sendType = "batch"asyncSend  sendType = "async"
)type sendTypeKey struct{}func newContextWithSendType(ctx context.Context, t sendType) context.Context {return context.WithValue(ctx, sendTypeKey{}, t)
}func sendTypeFromContext(ctx context.Context) (sendType, bool) {t, ok := ctx.Value(sendTypeKey{}).(sendType)return t, ok
}

http://www.ppmy.cn/devtools/168515.html

相关文章

记录一次okhttp包版本引用被覆盖的问题

一、现象 1.实现了一个框架包&#xff0c;其父包控制了okhttp版本号。 <dependencyManagement><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.14.7</version></dependen…

PostgreSQL17允许psql的\watch在返回最小行数后停止

PostgreSQL17允许psql的\watch在返回最小行数后停止 今天看看PostgreSQL17对psql中 \watch的优化改进。在psql中使用\watch运行重复查询时&#xff0c;当查询不再返回预期的行数时&#xff0c;可以停止监控进程&#xff0c;例如&#xff0c;监视pg_stat_activity中某个事件的存…

Spring Boot 启动顺序

Spring Boot 启动顺序主要涉及多个关键步骤&#xff0c;涵盖 SpringApplication 初始化、环境准备、应用上下文创建&#xff0c;以及 运行阶段。以下是详细的启动顺序解析&#xff1a; 1. 启动引导&#xff08;Bootstrap&#xff09; 入口&#xff1a;SpringApplication.run()…

本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】

目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…

手机蓝牙项目

一.蓝牙模块连接 首先将蓝牙模块与ch340模块连接然后打开串口软件调号参数。之后发送指令AT看是否有回复OK&#xff0c;有则连接成功&#xff0c;无说明串口没有连接好。 二.修改波特率 连接没有问题去查看波特率&#xff0c;然后修改波特率为我们串口代码写的&#xff0c;波…

YOLOv11小白的进击之路(九)创新YOLO11损失函数之NWD损失函数源码解读

之前的博客也有对YOLO11的损失函数进行过源码分析&#xff0c;可以参考&#xff1a;YOLOv11小白的进击之路&#xff08;六&#xff09;创新YOLO的iou及损失函数时的源码分析_yolov11的损失函数是什么-CSDN博客最近在做小目标检测的时候注意到了NWD损失函数&#xff0c;这里对其…

【课堂笔记】定理:样本越多,测量的经验损失越接近真实损失

定理描述 给定一个模型 f : X → Y f:X \to Y f:X→Y&#xff0c;设数据分布 D \mathcal{D} D定义在 X Y X \times Y XY&#xff0c;表示数据真实分布&#xff0c;且假设训练集和测试集的样本均从 D \mathcal{D} D中独立同分布(i.i.d)抽取。   设损失函数为 l : Y Y → R l…

Go红队开发—日志打印优化

文章目录 日志log输出打印日志控制测试源码 slog输出打印修改默认等级修改输出目的自定义logger添加日志细节子logger 日志颜色修改源码 各位师傅exp与poc编写暂时鸽了&#xff0c;感觉web编程那章节学完自己就能编写&#xff0c;想不出有什么能够学习的地方&#xff0c;因为po…