Go语言技术文章
-
用 Go list -json 查看包的 GoFiles、EmbedPatterns 和 EmbedFiles,区分参与构建的 Go 源文件、嵌入声明与最终匹配到的资源文件,并给出模板化提取方式。207 收藏 -
通过 Go html/template 小程序区分正常转义、预编码导致的重复转义和 URL 上下文过滤,说明输出源码与页面显示差异,以及 template.HTML 的可信内容边界。207 收藏 -
Go 的 bufio.Reader.Peek 只查看缓冲区数据,不会推进读取位置,但返回切片会在下一次读取后失效;如果忽略 Peek 错误或把普通 Read 当成精确读取,就会误以为数据不完整。本文用最小程序复现短读、ErrBufferFull 和正确的 io.ReadFull 修复方式。207 收藏 -
Go race detector 的创建栈用于追踪任务启动来源,访问栈用于定位冲突读写。通过任务编号、共享对象与互斥锁示例,说明如何确定同步责任并理解报告范围。206 收藏 -
本文从 root: 请求路径的实际问题出发,用 bytes.CutPrefix 解析协议前缀,再交给 Go 1.24 的 os.OpenRoot 和 Root.Open 读取受限根目录中的文件,并说明错误与关闭边界。206 收藏 -
os.Lstat 没有一个让它按配置决定是否跟随符号链接的开关:它固定描述链接条目,os.Stat 才描述目标。本文用 ModeSymlink、Readlink、相对路径基准和错误分支排查“配置没生效”的常见误解。206 收藏 -
Go httputil.DumpRequestOut 在 body=true 时需要读取请求体生成调试表示,再恢复 req.Body 供后续发送继续读取。本文解释这段生命周期、body 参数选择、内存与敏感数据边界,以及错误处理方式。206 收藏 -
xml.Encoder 的 Indent 会按元素嵌套深度插入换行和缩进。本文说明 prefix、indent 的区别,以及 EncodeToken 场景下 Flush、Close 的收尾边界,帮助你稳定生成可读的流式 XML。205 收藏 -
围绕协议兼容、CRC32C 与流式更新,说明 Go hash/crc32 中 IEEE、Castagnoli、Koopman 和自定义校验表的选择方法。204 收藏 -
os.DirFS 可以把固定目录暴露为 io/fs,但它不是 chroot 安全边界。本文从最小读取写法、fs.ValidPath 输入约束和符号链接风险讲起,并给出 Go 1.24+ 使用 os.OpenRoot 的安全替代方案。204 收藏 -
用一个阈值查询小工具说明 Go slices.BinarySearch 的返回值、升序前提、插入位置语义和边界处理,帮助把标准库 API 组合成可复用的业务函数。203 收藏 -
用 Go 的 big.Rat.FloatPrec 判断分数能否精确写成有限小数,读懂 n 与 exact 的含义,并处理 FloatString 的舍入边界。203 收藏 -
Go encoding/csv 解析失败时,errors.As 可以取出 ParseError 的 StartLine、Line、Column 和底层 Err。本文用多行字段示例说明行列含义,并区分引号错误、字段数错误与业务定位。203 收藏 -
Go encoding/json 解码 PATCH 或可选配置时,普通字段无法区分缺失和显式 null。本文从 RawMessage 到泛型 Nullable,说明如何识别字段状态、处理空输入并保留类型错误。203 收藏 -
讲清 Go html/template.JSEscapeString 的字符串级 JavaScript 转义边界,用最小示例对比 HTML、JavaScript 与 URL 语境,并说明何时应交给 html/template 自动处理,避免重复转义和不安全的可信类型。202 收藏