Go教程技术文章
-
Go gob.RegisterName 可以为接口值中的具体类型指定稳定线上名称。本文用生产者与消费者小项目演示共享名称常量、本地类型注册、接口编码、重复注册 panic 以及结构体字段兼容升级边界。352 收藏 -
Go 服务调用不稳定依赖时,重试循环里反复使用 time.After 容易留下不可控的定时器分配,固定退避也会让请求集中重试。本文用可取消的 timer.Reset 写一个带上限、抖动和结果核对的重试器。351 收藏 -
Go 模块下载并不只是从代理拿一个 zip。本文从一次依赖校验异常出发,拆开 GOPROXY、go.sum、GOSUMDB、GOPRIVATE 的信任边界,给出公有依赖校验、私有模块配置和替换后复核的实战检查清单。351 收藏 -
Go 1.27 支持泛型方法,但类型参数写在接收者声明上,接口方法仍不能声明自己的类型参数。本文用一个可运行的小型数值容器,演示声明方式、调用边界、接口限制与 go test 验证。351 收藏 -
Go 默认会按操作系统的解析规则查找域名。需要固定 DNS 服务器时,可以给 net.Resolver 配置 Dial 回调,再把它接入 net.Dialer.Resolver,让 LookupHost 或 HTTP 客户端使用同一套解析策略。351 收藏 -
Go net/http 重定向会复制普通请求头,但 Authorization、Cookie 等敏感头有安全边界。本文用 CheckRedirect、主机白名单和 Cookie Jar 说明如何保留必要 Header。351 收藏 -
用 Go 标准库实现一个可取消的定时重试任务,覆盖 context 取消、指数退避、最大尝试次数、错误分类和优雅退出,给出可直接运行的最小示例与验收方法。349 收藏 -
测试 HTTP Handler 时,httptest.NewRequest 会按服务端请求语义填充 URL、Host、TLS 和 ContentLength。本文用路径、绝对 URL、HTTPS 与请求体四组样本,拆开检查请求目标边界,避免把客户端请求和服务端请求混在一起。349 收藏 -
当一个 Go 类型同时靠方法集实现文本编码或 JSON 编码时,json.Marshal 会先看 MarshalJSON,再考虑 encoding.TextMarshaler;nil 指针又有单独的保护规则。本文用最小示例拆开调用优先级、指针接收者和嵌套字段边界。349 收藏 -
用 Go crypto/tls 的 GetCertificate 配合 atomic.Pointer 保存不可变证书快照,实现不改动 tls.Config 的最小化证书轮换,并厘清并发读取、加载失败和旧连接的边界。349 收藏 -
用明确的 Go 包路径配合 go test -race,只检查目标包的竞态测试;同时区分 -run、./...、依赖编译和 -count=1 的作用边界。349 收藏 -
Go 自定义测试 helper 没有调用 testing.TB.Helper() 时,失败日志容易指向工具函数内部。本文说明 Helper 的正确位置、多层包装与并发边界,让错误行号回到业务测试调用处。349 收藏 -
用 Go runtime.SetFinalizer 说明终结器的触发条件、KeepAlive 的必要性、显式 Close 与终结器兜底的边界,并给出可运行的资源生命周期示例。348 收藏 -
bytes.FieldsSeq 从 Go 1.24 开始提供按 Unicode 空白切分字节串的单次迭代器。本文对比 bytes.Fields,解释 subslice、空白边界、迭代提前停止和底层字节切片生命周期。348 收藏 -
掌握 Go database/sql 的事务收尾方式:用 defer tx.Rollback 做失败兜底,所有操作走 sql.Tx,只有 Commit 返回 nil 才使用事务结果,避免提交错误被误判为成功。348 收藏