Go教程技术文章
-
Go 中复用 time.Timer 时,Reset 之前必须先处理可能残留的通道信号;否则循环可能立刻走旧分支。本文用一个可运行的轮询例子说明 Stop、<-timer.C、Reset 和 ctx.Done 的边界。175 收藏 -
Go 的 http.Client 默认只返回最终响应。本文从一次重定向排查开始,演示如何在 CheckRedirect 中复制请求信息、限制敏感请求头,并保存可验收的重定向链。175 收藏 -
用一个可复用的 ResponseWriter 包装器统一记录 Go HTTP 请求的状态码和响应大小,覆盖隐式 200、空响应、重复 WriteHeader 与 Flusher 边界。175 收藏 -
用 Go encoding/hex 把固定长度字节稳定编码为统一小写、可排序比较的字符串,解释 [N]byte、前导零、长度公式和文本比较的边界。175 收藏 -
说明 Go bufio.Scanner 读取超长单行时如何用 Buffer 调整 token 上限,正确处理错误与内存边界,并判断何时改用 bufio.Reader。175 收藏 -
Go io.NewOffsetWriter 把相对偏移映射到底层 WriterAt 的 base+off,适合文件分区、文件头和分段写入。本文讲清 Write、WriteAt、Seek、io.CopyN 及上限保护。175 收藏 -
Go 使用 netip.ParsePrefix 解析 CIDR、ParseAddr 解析待判断地址,再调用 Prefix.Contains 即可判断归属;误判时重点检查解析错误、地址族和 IPv4 映射 IPv6。175 收藏 -
Go build tags 与平台文件后缀在构建时选择源文件。本文通过互斥的 Linux、Windows 和通用实现,说明目标平台、包级排障命令、回退方式与跨平台交付边界。175 收藏 -
Go 的 io.TeeReader 可以在读取输入流的同时,把已经读到的字节同步写入另一个 io.Writer。本文用 bytes.Buffer 和 io.Copy 说明它的调用关系、无缓冲特性、错误传播方式,以及只复制实际消费数据时的边界。175 收藏 -
Golang · Go教程 | 2个月前 | golang · JSON · 故障排查 · Go教程 · 接口设计 · JSON Go 接口兼容性 DisallowUnknownFields 严格解码
接口增加 json.Decoder.DisallowUnknownFields 后,旧客户端多传字段会从静默兼容变成 400。本文用一个订单接口故障复盘这个变化,说明如何定位触发条件、保留严格校验的收益,并通过灰度和版本边界避免再次误伤旧请求。174 收藏 -
用 Go 的 base64.NewEncoder 流式编码时,Write 只处理完整 3 字节块,尾部数据要靠 Close 刷出;本文结合源码说明部分写入和错误传播的判断方法。174 收藏 -
Go 1.25 的 sync.WaitGroup.Go 把启动 goroutine、计数和完成收口放进一个方法,但它不负责取消任务,也要求 f 不发生 panic。本文用一个批处理示例拆开调用链、闭包变量和复用边界。174 收藏 -
Golang · Go教程 | 1个月前 | go并发 · pprof · 故障排查 · Go教程 · 版本升级 · GODEBUG runtime/pprof Go 1.27 goroutine 标签 tracebacklabels
Go 1.27 让带有 go 1.27 版本指令的模块在运行时回溯中默认显示 runtime/pprof goroutine 标签。本文从标签来源、go.mod 版本边界、tracebacklabels=0 回退和排查清单四个角度,说明什么时候保留诊断信息,什么时候关闭敏感标签。174 收藏 -
url.ParseRequestURI 面向 HTTP 请求目标,只接受绝对 URI、以斜杠开头的绝对路径或星号形式。本文用迁移清单梳理它与 url.Parse 的差异、字段结果、失败输入,以及语法通过后仍需补充的路由和安全策略。174 收藏 -
Go fuzz 发现失败输入后,真正应该提交到仓库的是 testdata/fuzz/FuzzXxx 下的 seed corpus。本文用一个可复用的流程说明如何重放、修复并让普通 go test 长期回归,同时区分 GOCACHE/fuzz 中的生成缓存。174 收藏