Go语言技术文章
-
解释 text/template.Template.Clone 如何复制已解析模板的关联命名空间,以及为什么 Clone 后可以用 Funcs 替换副本函数、用 Parse 添加变体而不改动原模板。469 收藏 -
Go crypto/rand.Int 返回 [0,max) 内的均匀随机整数。本文说明 rand.Reader、big.Int、闭区间 span、非法范围检查和大整数转换的边界。468 收藏 -
Go text/template 默认会继续执行缺失的 map 字段。本文说明如何用 Option("missingkey=error") 让 Execute 立即返回错误,并比较 default、zero 与 error 的适用边界。468 收藏 -
Go 比较敏感摘要时,应对等长字节序列使用 crypto/subtle.ConstantTimeCompare;HMAC 校验优先使用 hmac.Equal。本文说明长度不一致会立即失败、返回值如何判断,以及摘要编码和最小测试的边界。468 收藏 -
io.Pipe 写入阻塞常与同步背压、消费者提前退出及关闭责任有关。本文给出一读一写的完整示例,说明消费失败如何关闭读端通知写端,并比较 Pipe、内存缓冲和有界队列的适用边界。468 收藏 -
Go compress/gzip Writer 的 Write 可能把错误留在压缩过程或 Close 收口阶段。本文用错误分层、临时文件和原子提交说明如何丢弃半成品、保留根因并安全清理底层资源。468 收藏 -
Go url.URL.JoinPath 用于按 URL 语义组合路径段,会处理多余斜杠和点段,但不负责查询参数、文件路径或权限校验。本文结合代码说明 Path、RawPath、EscapedPath 与 RawQuery 的边界,帮助你安全地拼接 HTTP URL。468 收藏 -
Go reflect.TypeFor 可以直接从泛型类型参数取得 reflect.Type,不依赖运行时值是否为 nil。本文对比 TypeFor 与 TypeOf,解释接口、指针、Elem 和旧版本兼容写法,帮助排查反射类型为空或层级不对的问题。468 收藏 -
debug/elf.SectionByType 返回 nil 不等于 ELF 文件解析失败。本文区分 elf.Open 的错误、目标节不存在和节内容读取失败,并说明剥离符号的文件何时应回退到 SHT_DYNSYM。468 收藏 -
用 go/types.NewTerm 创建联合项,再用 types.NewUnion 组装 int 与 ~string 等类型集合,并说明嵌入接口约束、读取成员和检查重叠边界的方法。468 收藏 -
Go cgo 读取 C 结构体时,要把字段映射、整体布局和业务类型转换分开处理。本文说明 C.struct_*、关键字字段、C.sizeof_*、C.* 数值类型,以及位域和 union 的 C 侧包装边界。468 收藏 -
slog.Group 可以把请求、用户、订单等字段收进稳定的业务域命名空间。本文从 JSONHandler 的输出形状出发,说明普通属性与分组的区别、嵌套 Group、同名键、空组和日志边界封装的处理方法。468 收藏 -
Go 反射设置结构体字段时,关键不是直接调用 Set,而是先取得可寻址值,再判断字段存在性、CanSet 和类型可赋值性。本文用一个小型安全写入函数说明可导出字段的正确处理方式。467 收藏 -
Go 的 time.LoadLocation 找不到 IANA 时区数据时,不应静默继续。本文说明时区数据来源、容器部署处理,以及 UTC、固定偏移和直接失败三种明确降级策略。467 收藏 -
bufio.Reader.Peek 返回长度不足时,不能只看切片长度或直接索引请求位置。本文区分 ErrBufferFull、EOF 和底层错误,说明 Peek 不推进读取位置的边界,并给出复制预览结果、再用 io.ReadFull 消费固定长度的处理方式。467 收藏