Go教程技术文章
-
Go netip.Addr.Prev 返回当前 IP 之前的地址,并在地址空间边界返回零值。本文说明如何解析输入、区分 Addr{} 与 0.0.0.0/::、遍历 IPv4/IPv6 地址,以及处理带 zone 的 IPv6 地址。382 收藏 -
Go 1.24 同时提供 runtime.AddCleanup 和 os.Root。本文用一个可显式关闭的读取器,把文件名限制在指定根目录内,并说明 GC 清理兜底、KeepAlive、Stop 与错误处理边界。382 收藏 -
Go 的 heap.Fix 用于恢复已入堆元素改值后的堆顺序,关键是让元素保存的 index 始终与 Swap、Push、Pop 同步。本文用任务优先队列示例说明 Fix 的调用方式、复杂度、与 Remove 加 Push 的区别,以及 Pop 后旧索引为什么不能继续使用。381 收藏 -
Golang · Go教程 | 3星期前 | 反射 · 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 bytes.FieldsSeq 在 Go 1.24 起返回 iter.Seq[[]byte],按 unicode.IsSpace 规则遍历字段,不先创建承载全部结果的二维切片;本文从旧接口迁移、空白边界、切片生命周期和提前停止四个方面给出可直接使用的写法。380 收藏