Go语言技术文章
-
Go 的 template.FuncMap 适合注册纯函数,但闭包若持有可变共享状态,模板并发执行时仍会产生竞态。本文从注册、解析、执行三个边界拆解风险,并给出可验证的安全写法。423 收藏 -
runtime/metrics.Read 只负责把运行时指标写入 Sample 的 Value。本文用动态发现、类型判断和采样快照说明如何稳定读取,避免把指标描述、样本槽位和 Value 类型混为一谈。418 收藏 -
Golang · Go问答 | 1星期前 | golang · HTTP · Context · net/http · Go问答 · 请求复制 · Http请求 net/http context header Go问答 Request.Clone
net/http.Request.Clone 会复制请求的大部分结构和 Header,但不会复制 Body 的底层读取位置。本文用重试与多下游请求场景拆开 Body、Header、URL 和 Context 的独立性边界。496 收藏 -
Go 1.27 新增标准库 uuid 包。本文用 NewV7、Parse、Compare 和 String 拆开时间排序、格式兼容、非法输入与零值边界,给出可运行的请求标识示例。251 收藏 -
Go 1.22 改变了 range 循环变量的作用域。本文用 goroutine 闭包示例说明旧写法为何会读到同一个值、go.mod 如何决定语义,以及升级后怎样验证和清理多余代码。391 收藏 -
netip.ParseAddr 返回的 netip.Addr 是值类型,可以用 Compare 做排序和相等判断,但 IPv6 Zone、非法输入和零值仍要单独处理。本文用可运行示例拆开这些边界。133 收藏 -
os.CreateTemp 返回的是已经打开的临时文件,真正容易遗漏的是关闭文件描述符和删除失败残留。本文用一个安全写入配置文件的例子,拆开 Name、Close、Remove 与 Rename 的先后关系,并给出可复查的失败清理路径。324 收藏 -
用 Go runtime.SetFinalizer 说明终结器的触发条件、KeepAlive 的必要性、显式 Close 与终结器兜底的边界,并给出可运行的资源生命周期示例。348 收藏 -
crypto/rand.Read 的签名虽然返回 n 和 err,但当前 Go 文档规定它会填满切片且不返回错误。本文从 Reader、io.ReadFull 和失败测试边界解释为什么不能把部分字节当成可用随机值。461 收藏 -
解释 Go net/http 中 ResponseController.EnableFullDuplex 的适用边界,给出 HTTP/1 请求体与响应交错处理的最小示例、协议判断和中间件兼容检查。232 收藏 -
Go 解析流式 JSON 时遇到 SyntaxError,Decoder.InputOffset 能告诉你解码器已经读到哪个字节,但它不是行号也不是错误字符的万能定位器。本文用带换行的请求体演示如何结合错误信息、原始字节和 Decode 循环缩小排查范围。429 收藏 -
atomic.Uint64 适合维护并发计数,但一个已经使用过的值不能再通过复制传递。本文用请求计数器拆开 Add、Load、Store 和复制副本的边界,说明为什么会触发 go vet 警告,以及如何安全地初始化、读取和测试。379 收藏 -
用 Go 的 io/fs.Sub 把嵌入文件系统收窄到一个子目录时,真正容易出错的是目录名和 Open 路径的边界。本文通过 embed.FS 示例拆开 fs.Sub、fs.ValidPath 与 fs.PathError 的关系,并给出可复现的排查方法。142 收藏 -
Go 里用 sort.Slice 和 sort.SliceStable 排序时,真正容易忽略的是相等元素的顺序与 less 比较函数约束。本文用一组带优先级和序号的记录,演示两者差异、稳定排序的适用边界和可复查写法。142 收藏 -
Go slog 在多个子系统共用 id、status 等字段时,WithGroup 可以把属性放进稳定命名空间。本文用 TextHandler 和 JSONHandler 对比分组结果,并说明动态属性、嵌套分组与空组名的边界。387 收藏