Go问答技术文章
-
Go http.Client.Timeout 不只限制建立连接,还覆盖重定向和响应体读取;本文从响应头已返回但 Body 仍超时的现象出发,给出整体超时与请求级超时的排查写法。338 收藏 -
Go 1.26 的实验性 runtime/secret 通过 secret.Do 清理密码学临时数据。本文用一条短命密钥处理链说明启用方式、适用边界和不能替代的安全措施。337 收藏 -
Go 1.27 调整了 //line 与 /*line*/ 中相对文件名的解析方式:它们现在相对包含指令的源文件目录解析,而不是依赖启动编译命令时的工作目录。本文用生成代码目录示例拆解路径、行列号和跨版本核对方法。337 收藏 -
Go 并发代码里,atomic.Pointer[T] 适合发布一个可整体替换的指针,sync.Mutex 适合保护多个字段组成的不变量。本文按读写模式、对齐和混用风险给出选择方法。337 收藏 -
Go 中 context deadline exceeded 表示截止时间到期,context canceled 表示主动取消。本文用 errors.Is、ctx.Err 和 context.Cause 说明判断边界、错误包装与日志重试处理。337 收藏 -
Go runtime/pprof 可以把请求分类信息写进 CPU Profile 的样本标签。本文用 pprof.Do 建立请求边界,再用 go tool pprof 的 tags、tagfocus 和 tagroot 分析路由热点,并说明标签继承、覆盖和高基数边界。337 收藏 -
time.Duration 本质是 int64 纳秒计数,乘法、单位换算或退避累加一旦超出约 290 年范围就可能回绕成负数或异常的小值。本文从定时任务故障场景出发,给出边界判断、饱和乘法和定时器接入的 Go 实现。337 收藏 -
Go build 默认会在条件满足时写入版本控制信息。本文围绕 -buildvcs 解释 stamping 失败的原因、仓库边界和修复选择。337 收藏 -
io.LimitedReader 的 N 是剩余读取预算,不是底层文件或网络流的真实长度。本文按 N、读取字节数和 error 分层判断达到上限、源数据提前 EOF 与其他错误,并给出固定长度读取的选择。337 收藏 -
Go embed 在编译期把文件内容写入运行包,修改磁盘文件后必须重新构建并确认启动的是新产物。本文用 embed.FS 示例说明旧二进制、路径不一致和开发态加载方式的排查边界。337 收藏 -
Go 中 bytes.Equal 和 string == 都是在比较底层字节序列,但 []byte 不能直接做内容比较,nil 与空切片、UTF-8 和 Unicode 规范化又有不同边界。本文用最小例子说明如何选对比较方式。337 收藏 -
Go unicode.IsMark 判断的是单个 rune 是否属于 Unicode 的 Mark 类别 M,包含非间距、间距组合和包围标记。本文用具体字符串拆开预组字符与组合序列,说明如何按 rune 分类、如何解释字节偏移,以及为什么 IsMark 不能代替正规化或用户感知字符切分。337 收藏 -
Go roaring 的 Rank 用于统计小于等于目标值的元素数量,Select 用于按 0 起始序号取出有序集合中的元素。本文用 Go 示例说明两者的下标约定、分页用途和空集合、越界、并发访问边界。337 收藏 -
Go 1.23 的 slices.Chunk 返回的是源切片的连续子切片视图:直接改元素会影响原切片,但每个分块的容量被限制为长度,append 不会沿用这段容量改写源数据。需要独立分块时使用 slices.Clone。337 收藏 -
Go io.Copy 返回 short write 时,问题通常在目标 Writer:它少写了数据却没有返回具体错误。本文用返回值、Writer 契约和 WriterTo/ReaderFrom 快路径区分读端错误与写端短写。336 收藏