Go语言技术文章
-
解释 Go adler32.New 返回的 hash.Hash32 如何通过 Sum 追加 4 字节摘要,为什么传入切片的前缀会保留,以及 Checksum、Sum32 和 Sum 的选择边界。199 收藏 -
用 Go net/http/httptrace 观察 GetConn、GotConn、PutIdleConn 和 GotConnInfo,定位 Response.Body、Transport 复用配置及 HTTP/2 场景下的连接未复用问题。139 收藏 -
用 Go html/template 完成用户输入自动转义,覆盖 HTML 文本、href 属性、脚本上下文、安全类型与不安全 URL 的边界。261 收藏 -
Go archive/zip.Reader 逐项读取时,结果为空通常不是 range 失效,而是 Reader 构造、文件大小、目录条目或 File.Open 错误没有被分别记录。本文给出本地 ZIP 与 ReaderAt 两种读取方式,并用可量化的条目指标定位不完整结果。332 收藏 -
Go 的 archive/zip 提供 OpenReader 和 NewReader 两种读取入口。本文从逐项遍历 ZIP 条目开始,说明怎样区分目录、打开文件内容、限制读取范围并处理关闭和读取错误,最后封装一个可复用的读取函数。200 收藏 -
Go 的 macho.OpenFat 返回 ErrNotFat 时,通常只说明文件不是 universal binary 但可能是普通 Mach-O。本文解释魔数判定、错误分支、资源关闭和不能盲目回退的边界。377 收藏 -
httputil.ReverseProxy 的 ErrorHandler 专门接管后端请求失败和 ModifyResponse 返回的错误。本文说明默认 502 的触发范围,给出可脱敏记录请求上下文、区分取消与上游不可达的自定义处理器,并说明响应已写出和 body 复制失败时的边界。125 收藏 -
解释 Go context.AfterFunc 取消清理与停止回调的区别,用 sync.Once 和完成信号处理空输入、并发收尾及错误合并,并说明适用限制。127 收藏 -
rsa.PrivateKey.Validate 返回错误时,不要直接修改 N、D、P、Q 等字段。本文用不泄露私钥数值的诊断代码区分字段缺失、素数乘积与 N 不一致、E 不合法和原始密钥损坏,并给出重新解析 PKCS#1/PKCS#8 的修复路径。285 收藏 -
http.Server.BaseContext 的字段为 nil 与回调返回 nil 不是一回事:前者使用 context.Background,后者会在服务器开始接收连接前触发 panic。本文按启动时间线拆开这个边界,给出非空 Context 修复写法和回归测试。322 收藏 -
context.WithTimeout 超时后,子协程仍在运行通常不是超时失效,而是 goroutine 没有监听 ctx.Done(),或卡在无法取消的阻塞调用中。本文用最小复现区分取消信号和强制终止,再给出可退出、可清理的 select 写法。159 收藏 -
Go pprof.Lookup 返回 nil 时,优先检查 Profile 是否注册、名称是否逐字一致以及查找时机是否早于初始化。本文给出自定义 Profile 的注册、诊断和导出方法。378 收藏 -
ast.IsGenerated 依赖解析时保留的标准生成注释。通过解析模式、固定前后缀及标记位置的对照示例,说明返回 false 的常见原因与工具使用范围。457 收藏 -
用一个短时长 Go time.Timer 最小复现 Stop 后仍收到事件的现象,解释 Go 1.23 前后的通道语义差异,并给出不会误阻塞的兼容处理方式。471 收藏 -
Go bytes.Buffer.Grow 只预留后续写入容量,不会增加有效数据长度。本文区分 Grow、Len、Cap 和 Bytes,说明如何正确写入、读取、复用缓冲区并处理边界。110 收藏