Go教程技术文章
-
Go 批量任务不要只返回一个模糊错误:用结构化失败记录保留输入编号与阶段,再用 errors.Join 汇总整批失败状态,并通过 errors.Is、errors.As 支持分类判断和重试。403 收藏 -
通过命名切片调用泛型过滤函数后类型退化的问题,讲清 S ~[]E 的含义、类型推断、返回 S 的实现方式,以及 nil、底层数组共享和元素类型变化时的设计边界。387 收藏 -
Go maphash.Seed 只属于单个进程,不能序列化或跨进程重建。本文解释它与 Hash、Sum64 的关系,并给出保存稳定摘要、重启后重建内存分桶的 Go 实现方案。385 收藏 -
读取 pkg.go.dev 包文档索引要组合两个 v1 端点:package 端点通过 doc=md 返回文档正文,symbols 端点返回结构化符号;还需处理 nextPageToken、module 歧义和版本固定。381 收藏 -
Go net/http 生产服务应显式配置请求头、响应写出和空闲连接超时,并把 ListenAndServe、信号监听、Shutdown 与 Close 组织成有边界的退出流程,避免慢连接拖垮服务或重启时直接丢失在途请求。378 收藏 -
sync.OnceFunc 包装的函数如果首次执行 panic,被包装函数不会重试,但包装函数之后每次被调用都会使用同一个 panic 值再次 panic。本文给出最小示例、与 sync.Once.Do 的差异,以及线上恢复、失败缓存和重试设计建议。377 收藏 -
Go 的 zip.File.OpenRaw 返回 ZIP 条目未经解压的压缩字节流。本文给出流式读取、长度核对、Store 与 Deflate 区别,并比较 Open、Writer.Copy 和 DataOffset 的选择边界。372 收藏 -
go work sync 面向多模块 Go 工作区:它根据 workspace build list 和 MVS 选择依赖版本,并把相关结果同步回各模块的 go.mod。本文用对比方式说明 go.work、go work sync、go mod tidy 与 go get 的职责边界。370 收藏 -
Go 迭代器提前停止时,push 模式应在迭代器内部 defer 关闭资源并在 yield 返回 false 后立即 return;iter.Pull 模式则要在取得 next、stop 后立刻 defer stop。本文给出错误边界、包装器写法和可验证的测试清单。359 收藏 -
用固定 worker、带容量的 jobs channel、可取消提交和 WaitGroup 收尾,把 Go 中每条输入都启动 goroutine 的无界并发改造成可解释的工作池。350 收藏 -
Go 1.26 的 //go:fix inline 可让库作者把旧 API 的兼容包装函数转成自动迁移规则。本文用改名与参数重排示例说明声明方式、go fix -diff 预览、批量执行和回归检查。347 收藏 -
os.Root 把受信任目录封装成文件访问边界:Root 方法可跟随仍位于根内的符号链接,但任何路径组件一旦解析到根目录之外就返回错误。本文给出安全打开模式、反例、平台限制和补丁版本提醒。347 收藏 -
Go JSON API 客户端重试不能只靠循环。本文用 net/http、context 和 JSON 字节重建请求,划分网络错误、429/5xx、4xx 与副作用请求的边界,并限制尝试次数、总超时和退避时间。345 收藏 -
Go 1.22 新增 reflect.TypeFor[T](),可以在没有现成值时直接取得泛型参数 T 对应的 reflect.Type。本文通过最小示例、接口类型对比和泛型注册表说明 TypeFor 与 TypeOf 的区别及使用边界。343 收藏 -
从 HTTP Handler 取出请求上下文,沿数据库查询和下游 HTTP 调用继续传递截止时间,说明 QueryContext、NewRequestWithContext、错误判断与资源清理的边界。336 收藏