Go语言技术文章
-
Go 使用 slices.Compact 原地合并相邻重复元素时,应接住返回切片并停止使用旧长度视图。本文说明相邻去重、共享底层数组与容量的区别,梳理 Go 1.22 尾部清零变化及保留输入的写法。342 收藏 -
Go 设置 GOMAXPROCS 后吞吐没有提升,先区分 CPU 配额、I/O 等待、锁竞争和串行边界,再用固定负载对照测试选择并行度。342 收藏 -
Golang · Go问答 | 2星期前 | 切片 · 标准库 · 性能 · 编码 · Go问答 · Go 文本格式化 encoding.TextAppender AppendText TextMarshaler 低分配
Go 1.24 新增的 encoding.TextAppender 允许类型把文本直接追加到调用方已有的 []byte。本文用一个自定义类型说明 AppendText 的实现、缓冲区边界、错误返回,以及怎样与 TextMarshaler 保持兼容。342 收藏 -
解释 os.DirFS 与 fs.ValidPath 只能约束 fs 路径语法,为什么仍挡不住根目录中的符号链接或相对根目录变化,并给出使用 os.Root 的迁移方式。342 收藏 -
Go 1.27 新增 crypto/mldsa,可用 MLDSA44、MLDSA65 或 MLDSA87 生成 ML-DSA 私钥。本文给出密钥生成、公钥导出、seed 恢复以及带 context 的签名验证写法,并说明参数尺寸和 FIPS 140-3 边界。342 收藏 -
Go text/template 的 break 只能结束最内层 range。本文用一个紧凑示例说明如何在命中条件后停止模板输出,并区分 break、continue、else 与嵌套 range 的控制边界。342 收藏 -
Go jsontext.Decoder 可以把 JSON 当作 token 流读取,不必先反序列化成 Go 对象。本文从语法层和对象层的区别讲起,演示 ReadToken、PeekKind、ReadValue、输入偏移量和嵌套边界的使用,说明流式筛选时如何控制读取粒度与错误处理。342 收藏 -
Go time.After 在高频循环中会反复创建一次性 Timer,额外成本来自创建、运行时调度和回收路径。本文解释 Go 1.23 的回收语义,并给出复用 Timer 的判断与写法。342 收藏 -
Go compress/zlib.Reset 可以在保持压缩级别和字典配置的前提下切换输出写入器,适合批量处理多个独立数据块。本文说明 Close、Flush、Reset 的边界,以及 bytes.Buffer 结果复制与所有权管理方法。342 收藏 -
Go io.ReadAtLeast 会根据已读字节数、min 和缓冲区长度返回不同结果。本文从固定长度读取故障出发,拆解短读、EOF、ErrUnexpectedEOF 与 ErrShortBuffer 的判断方式,并给出可复用的修复和防复发写法。342 收藏 -
从 ast.ImportSpec.Name 和 Path 入手,拆解 Go 点导入、空白导入与默认导入在语法树中的表示和编译期语义,并给出安全分类与改写代码。342 收藏 -
Go encoding/asn1.BitString 用 BitLength 标记有效位数量,Bytes 保存按字节打包的位。本文解释非字节对齐时 RightAlign 如何把填充位移到开头,比较 At 与 RightAlign 的使用场景,并说明字节对齐时的切片共享内存边界。342 收藏 -
Go 1.22+ 的 net/http.ServeMux 可以把 HTTP 方法、路径通配符和参数提取直接写进路由模式。本文用一个小型文章接口说明 GET/HEAD、PathValue、剩余路径、优先级与尾斜杠边界。341 收藏 -
Go maphash.Hash 的零值会自行选择随机种子,测试或并发计算需要显式共享 Seed,再为每个计算者创建独立 Hash。本文说明 MakeSeed、SetSeed、Reset 的关系,以及 maphash 不适合密码摘要和持久化协议值的边界。341 收藏 -
Go 生成登录链接、一次性令牌或接口随机值时,应让 crypto/rand.Reader 填充固定长度的字节缓冲,再按传输场景编码。本文解释字节长度、Read 错误、RawURLEncoding 和边界处理。341 收藏