Go问答技术文章
-
slices.Delete 会原地移动元素并返回新切片。排查对象迟迟不释放时,要同时看 Go 版本、尾部引用是否清零、返回值是否接住,以及底层数组容量是否仍被长期持有。293 收藏 -
bytes.Buffer.AvailableBuffer 返回的不是可长期持有的普通切片,而是给下一次 Buffer.Write 准备的可追加空间。本文用最小示例说明 Append、Write、Bytes 之间的边界,以及何时必须复制数据。197 收藏 -
bytes.Buffer.Bytes 返回的是底层缓冲区的未读切片。Reset 会清空长度但保留存储,后续 Write 可能改写旧切片可见的数据;本文用最小实验说明安全复制和复用边界。160 收藏 -
io.SectionReader 用 Size 报告固定区间长度,用 ReadAt 按区间内偏移读取;分片下载先校验块范围,再把相对偏移交给 ReadAt,才能避免越界和错误重试。242 收藏 -
os.DirFS 把目录包装成 io/fs.FS,但它不等于 chroot;filepath.Join 只能拼接本地路径,fs.ValidPath 负责校验 FS 名称,符号链接仍可能把访问带出根目录。439 收藏 -
Go 的 url.URL.JoinPath 会合并路径、清理 ./ 和 ../,并把连续斜杠压成一个。它适合拼接已经转义的路径片段,但不能替代路径段转义;本文用源码规则解释斜杠变化和路由边界。486 收藏 -
解释 Go net.IP.Equal 如何处理 4 字节 IPv4 与 IPv4-mapped IPv6,结合 To4 和 16 字节表示说明比较、规范化与边界判断。477 收藏 -
time.Time 的 Equal 比较时间点,== 还会比较 Location 和单调时钟读数。本文用可运行示例拆开两者的边界,并说明 Round(0)、UTC 与序列化后的差异。458 收藏 -
解释 Go strings.Builder.Grow 的保证范围、容量与已写入字节的关系,以及 String 返回值和后续写入之间容易误判的边界。243 收藏 -
json.RawMessage 适合把 JSON 解码延后,但 MarshalJSON 与 UnmarshalJSON 的字节所有权规则不同。本文用最小代码说明何时会复制、何时只是复用已有字节,以及如何避免修改底层切片带来的隐蔽问题。143 收藏 -
解释 bytes.Buffer 的 Available、Len、Cap 与 Grow 如何配合,给出可验证的追加空间判断,以及 AvailableBuffer 的使用边界。365 收藏 -
os.File.ReadFrom 不只是把 io.Reader 读进文件:它会先检查文件状态,再按平台选择专用路径或通用读取循环。本文用 io.Copy、文件偏移和短写场景说明如何判断结果。137 收藏 -
Go 自动化任务常常不是启动后一直跑到底:触发端取消、排队中的任务和已经开始的 worker 都要收到同一个 context 信号。本文用一个小型任务流水线说明 Done、Err、cancel 与 Wait 的职责边界。442 收藏 -
Golang · Go问答 | 3星期前 | JSON · go · 数据校验 · 错误排查 · JSON Go encoding/json 嵌套对象 DisallowUnknownFields Decoder 字段校验
DisallowUnknownFields 只会在目标是结构体时拒绝未知键,嵌套结构体仍会继续校验,但 map、interface 和自定义 UnmarshalJSON 会改变边界。通过一个可运行的配置解码例子,可以看清错误出现的位置以及如何补上严格校验。268 收藏 -
围绕 Go net/http Cookie.Partitioned 说明 CHIPS 的设置方式、Secure 与 SameSite=None 的组合要求,以及浏览器兼容和降级核验边界。227 收藏