Go教程技术文章
-
读取 pkg.go.dev 包文档索引要组合两个 v1 端点:package 端点通过 doc=md 返回文档正文,symbols 端点返回结构化符号;还需处理 nextPageToken、module 歧义和版本固定。381 收藏 -
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 io/fs.ValidPath 讲清虚拟文件路径的有效边界、Windows 字符处理、FS.Open 契约与测试分层。380 收藏 -
Go 1.24 的 testing.T.Context 会在 Cleanup 回调执行前取消。本文用后台 worker 示例说明如何传递测试上下文、等待 goroutine 退出,以及父子测试、超时和清理阶段的生命周期边界。380 收藏 -
Go bytes.FieldsSeq 在 Go 1.24 起返回 iter.Seq[[]byte],按 unicode.IsSpace 规则遍历字段,不先创建承载全部结果的二维切片;本文从旧接口迁移、空白边界、切片生命周期和提前停止四个方面给出可直接使用的写法。380 收藏 -
用可选 Sender 示例解释 Go 接口为何会携带 nil 指针,区分接口比较、类型断言和对象可用性,并通过构造函数明确缺席时的 nil 返回约定。380 收藏 -
Go io.TeeReader 可以在下游继续读取原始上传流的同时,把已经读出的字节同步写给统计器。本文用一个保留 Close 的 ReadCloser 包装器记录实际流量,并说明同步写入、错误传播、提前停止和 Content-Length 的边界。379 收藏 -
用 C.CBytes、C.GoBytes 和 C.free 划清 Go 与 C 的字节缓冲区所有权,避免异步保存 Go 指针造成悬空引用。379 收藏 -
Go net/http 生产服务应显式配置请求头、响应写出和空闲连接超时,并把 ListenAndServe、信号监听、Shutdown 与 Close 组织成有边界的退出流程,避免慢连接拖垮服务或重启时直接丢失在途请求。378 收藏 -
Go 1.27 的 jsontext.Value 可保存一个原始 JSON 值,但直接转换、Clone、IsValid、MarshalJSON 与 Encoder.WriteValue 的职责不同。本文从切片复用导致内容变化的现象出发,给出安全保存、结构体透传和再次编码方案。378 收藏 -
Go 处理超出 int64 范围的业务整数时,应使用 math/big 的 big.Int.SetString 完整解析,明确十进制与 base=0 的区别,检查失败标记并在转 int64 前确认范围。378 收藏 -
sync.OnceFunc 包装的函数如果首次执行 panic,被包装函数不会重试,但包装函数之后每次被调用都会使用同一个 panic 值再次 panic。本文给出最小示例、与 sync.Once.Do 的差异,以及线上恢复、失败缓存和重试设计建议。377 收藏 -
以 Go 1.27 泛型方法为背景,演示如何保留旧 Loader 接口、提取共享核心、增加具体类型泛型方法和包级适配函数,并按可回滚顺序迁移调用方。377 收藏