Go问答技术文章
-
Go 的 os.File.Chmod 并不是跨平台等价的权限开关:Unix 会使用权限位及特殊模式位,Windows 当前只看 0o200 来切换只读属性。本文用同一段代码拆开模式位、符号链接和平台边界,给出可验证的写法。112 收藏 -
Go 的 net/http.MaxBytesReader 不只是一个 io.LimitReader:它返回可关闭的请求体,超限读取会得到 MaxBytesError,并可提示服务器关闭连接。本文用上传接口拆开限制位置、错误判断和连接处理边界。224 收藏 -
Golang · Go问答 | 5天前 | 密码学 · Go问答 · 安全编程 · crypto/subtle · Go crypto/subtle ConstantTimeSelect 固定时间 侧信道
crypto/subtle.ConstantTimeSelect 只接受 0 或 1,并在两个候选整数之间做固定时间选择。本文用 ConstantTimeEq 生成选择值,解释它适合保护什么、不能替代哪些安全边界,以及如何用测试核对结果。433 收藏 -
encoding/binary.Append 会把固定大小数据追加到已有字节切片,并返回可能扩容后的新切片。正确承接返回值,才能同时处理底层数组复用、容量变化和不支持类型的错误。467 收藏 -
Golang · Go问答 | 5天前 | go · Context · net/http · Go context取消 http.NewRequestWithContext Request.WithContext
http.NewRequestWithContext 与 Request.WithContext 都能把 context 交给 Go HTTP 请求,但创建时绑定、浅拷贝语义和请求体复用边界并不一样。本文用可运行示例拆开取消责任、Clone 深拷贝和常见误区。177 收藏 -
strings.TrimSpace 不只处理 ASCII 空格,它按 Unicode 空白规则裁掉字符串两端字符。本文用最小实验拆开 TrimSpace、unicode.IsSpace 与 TrimFunc 的关系,并给出字段清洗时的边界做法。420 收藏 -
net.Buffers 把多个字节切片组织成一次 WriterTo 写入,并在支持批量写的连接上走 writev 优化;理解 WriteTo 的切片消费和短写边界,才能安全拼接协议响应。271 收藏 -
signal.NotifyContext 让操作在收到系统信号时通过 ctx.Done 退出,但取消上下文与停止信号订阅是两件事。理解 stop 的资源释放和默认信号行为,才能写出可重复启动、可测试的优雅退出代码。295 收藏 -
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 收藏