Go教程技术文章
-
Go 的 heap.Fix 用于恢复已入堆元素改值后的堆顺序,关键是让元素保存的 index 始终与 Swap、Push、Pop 同步。本文用任务优先队列示例说明 Fix 的调用方式、复杂度、与 Remove 加 Push 的区别,以及 Pop 后旧索引为什么不能继续使用。381 收藏 -
Golang · Go教程 | 4星期前 | 反射 · Go教程 · database/sql · Go database/sql Rows.Scan ColumnType ScanType 动态查询导出
Go 动态 SQL 导出不知道列结构时,可以先读取 Rows.ColumnTypes,再用 ColumnType.ScanType 返回的 Go 类型创建 Scan 指针;驱动不提供具体类型时回退到 any,扫描后复制字节切片并保留 NULL。381 收藏 -
自定义 slog.Handler 只在同步读取当前记录时可以直接使用 Record;一旦要把记录交给多个下游或异步保存,就应先调用 Record.Clone。本文说明共享状态边界、属性遍历方式和并发交接清单。381 收藏 -
Go 的 SetMemoryLimit 是 runtime/debug 中的软内存上限,不会自动限制 map 缓存。本文用运行时预算、缓存硬边界和淘汰指标三层策略,说明怎样减少无界缓存导致的内存压力,以及为什么上限不能盲目设低。381 收藏 -
Go fuzzing 可在回调入口用长度和字符规则筛选输入,再执行合法域性质断言。对比 return、Skip 和构造输入,并说明如何保留坏格式测试与控制成本。381 收藏 -
Go 1.27 的 bytes.CutLast 可以把按最后分隔符拆分的返回值直接表达为 before、after 和 found,省掉 LastIndex 后的偏移计算,同时保留未找到分隔符和原始切片共享这两个边界。381 收藏 -
Go 解析 Set-Cookie 后,完整输入行会保存在 http.Cookie.Raw;本文说明怎样从 Response.Cookies 或响应头逐条读取它,并区分 Raw、Unparsed、RawExpires 与 String() 的重建结果。381 收藏 -
Go crypto/ecdh 的 X25519 公钥不是任意长度的椭圆曲线点,而是固定 32 字节的 u 坐标编码。本文解释 NewPublicKey 的输入边界,并对比 P-256 的未压缩点格式,避免协议字段混用。381 收藏 -
说明Go channel用range消费直到关闭的方法,给出单生产者与多生产者示例,区分缓冲读空、有效零值、关闭权、取消和业务完成。381 收藏 -
Go 的 build constraints 不是只看文件里有没有 import C,而是由显式 //go:build、文件名后缀、目标平台和 cgo 是否启用共同决定文件是否进入包。本文用一对互补实现说明纯 Go 与 cgo 文件的选择规则、跨编译边界和 go list 排查方式。381 收藏 -
filepath.Rel 负责按当前系统规则计算相对路径,filepath.ToSlash 负责把成功结果转换成统一的 / 表示。本文用原创示例说明错误处理、输出格式和 .. 边界。381 收藏 -
Go time.Timer.Reset 的 true 和 false 不是成功失败,而是表示旧定时器在调用前仍 active,还是已经到期或停止。本文比较两种状态下的下一次触发、t.C 接收和 Go 1.23 之后的旧值语义,并给出可复用写法。381 收藏 -
Go 1.27.1 已于 2026 年 9 月 1 日发布。本文按 cgo、编译器、运行时和 net/http 拆解修复范围,并给出升级前后的检查顺序与回滚边界。380 收藏 -
Go 1.23 的 range-over-function 会把循环里的 break 转成迭代器可识别的停止信号。本文用 iter.Seq、Seq2 和 iter.Pull 说明 yield 返回 false、defer 清理与 stop() 的配合,解决惰性遍历提前结束时资源没有释放的问题。380 收藏 -
使用 Go 的 encoding/xml 解析重复出现的嵌套元素时,把匹配字段声明为切片即可逐项接收;再结合 XMLName、属性标签和命名空间 URI 约束结构,避免同名节点映射错位。380 收藏