Go语言技术文章
-
Go 1.24 的 os.OpenInRoot 如何安全打开不可信文件名?本文用目录逃逸、符号链接和错误分支说明 Root 的边界,并给出可核对的最小代码。381 收藏 -
json.Decoder 默认会忽略结构体中不存在的 JSON 字段。本文用兼容升级、管理接口和边界校验三个场景说明 DisallowUnknownFields 什么时候适合开启,以及如何识别 unknown field 错误。278 收藏 -
os.ReadFile 适合一次性读取小文件,但面对超大配置会把完整内容装入 []byte。本文比较 os.ReadFile、os.Open 与 bufio.Reader 的使用边界,给出按行分块解析和可复查的内存控制方法。307 收藏 -
Go 的 template.FuncMap 适合注册纯函数,但闭包若持有可变共享状态,模板并发执行时仍会产生竞态。本文从注册、解析、执行三个边界拆解风险,并给出可验证的安全写法。423 收藏 -
runtime/metrics.Read 只负责把运行时指标写入 Sample 的 Value。本文用动态发现、类型判断和采样快照说明如何稳定读取,避免把指标描述、样本槽位和 Value 类型混为一谈。418 收藏 -
Golang · Go问答 | 2个月前 | 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 收藏