Go问答技术文章
-
Go 使用 io.CopyN 复制固定长度数据时,源数据不足会返回已复制字节数和 EOF。本文用可复现的小例子拆开短读、剩余字节与错误判断,并说明什么时候应该改用 io.ReadFull。267 收藏 -
bytes.Buffer.Bytes 返回的是未读内容的别名切片,不是自动拷贝。本文用 Write、Grow、Reset 和 append 的边界说明何时可以直接读,何时必须 copy,避免缓存复用后数据悄悄变化。267 收藏 -
Golang · Go问答 | 1天前 | 标准库 · 排序 · 泛型 · Slices · Go问答 · Go 稳定排序 iter.Seq slices.SortedStableFunc slices.Values
slices.SortedStableFunc 适合把迭代器中的数据收集到新切片后稳定排序。本文用订单优先级示例说明相等元素为什么保序、原切片为什么不会被直接改写,以及 Go 1.23 代码的兼容边界。266 收藏 -
URL.Redacted 会复制 URL 并把 User.Username 与密码替换成占位符,适合记录请求地址,但不能代替完整日志脱敏。本文用 Go 代码说明调用链、凭据边界和常见误区。261 收藏 -
Go 的 atomic.Int64 不能在首次使用后复制。本文从 noCopy 约束、指针接收者和结构体字段设计出发,给出并发计数的安全写法与检查方法。258 收藏 -
Golang · Go问答 | 1天前 | 标准库 · JSON · go · 数据解析 · 边界处理 · Go token encoding/json json.Decoder JSON流 More
当 JSON 字段不固定,encoding/json.Decoder.Token 可以按流读取结构边界。本文用 Token、More 和 json.Delim 解析嵌套对象,说明何时遇到 io.EOF、如何跳过未知值,以及最容易写错的 More 调用位置。255 收藏 -
regexp.Regexp 默认采用左侧最先匹配的规则,调用 Longest 后会在同一起点优先选择更长结果。本文用路由前缀示例解释两种语义、并发边界与验证方法。255 收藏 -
解释 Go 文件写入、Sync 和 Close 的边界,给出临时文件替换与错误处理的可验证写法。249 收藏 -
用一个可复现的流式上传场景说明 Go io.Pipe 的同步阻塞关系、错误回传路径和关闭顺序,避免生成端与上传端互相等待。248 收藏 -
Golang · Go问答 | 2天前 | golang · slog · 日志排查 · 结构化日志 · Go 1.21 · 结构化日志 JSON日志 Go slog.WithGroup slog嵌套字段 日志属性
Go slog.Logger.WithGroup 用组名组织结构化日志字段,但空组名不会创建嵌套层,属性归属还会受到 Handler 处理规则影响。本文用 JSON 输出示例拆解 WithGroup、WithAttrs 和重复组名的边界。247 收藏 -
Golang · Go问答 | 1天前 | golang · 配置管理 · regexp · Go问答 · 文本序列化 · Go regexp.Regexp.MarshalText UnmarshalText 正则配置 文本序列化
regexp.Regexp 可以通过 MarshalText 保存为正则表达式文本,再由 UnmarshalText 调用 Compile 恢复。本文核对序列化内容、非法模式的错误边界,以及 POSIX 和 Longest 模式无法完整保留的限制。245 收藏 -
解释 Go strings.Builder.Grow 的保证范围、容量与已写入字节的关系,以及 String 返回值和后续写入之间容易误判的边界。243 收藏 -
io.SectionReader 用 Size 报告固定区间长度,用 ReadAt 按区间内偏移读取;分片下载先校验块范围,再把相对偏移交给 ReadAt,才能避免越界和错误重试。242 收藏 -
Go 1.25 的 trace.FlightRecorder 适合捕获长时间运行服务中的短暂性能异常。本文从缓冲窗口、触发快照、go tool trace 分析和并发边界入手,说明什么时候该用它,以及如何控制内存和文件大小。240 收藏 -
Go slog.HandlerOptions.AddSource 会让 TextHandler 或 JSONHandler 把日志调用点写入 source 字段,但它需要计算调用栈位置。本文用一个可运行示例说明 source 的来源、包装函数对定位的影响、性能成本与脱敏边界。235 收藏