Go语言技术文章
-
Go HTTP/3 客户端可通过 RoundTripper 隔离业务接口,用互斥文件控制构建。但运行时关闭和构建标签不等于模块可选,工具链兼容还需按依赖版本处理。471 收藏 -
io.ReadAll 会把输入一直读到 EOF 并返回完整字节切片。本文按是否需要完整内容、能否设置大小上限和是否可以边读边处理,给出 LimitReader、固定缓冲区与 io.CopyBuffer 的选择方法。471 收藏 -
Go io.Copy 本身不会因为文件很大就把整个文件读入内存。遇到内存异常增长时,应先检查 WriterTo、ReaderFrom 快路径,再排除 bytes.Buffer、io.ReadAll 和长期引用等累计路径。471 收藏 -
Go database/sql 的 Result.RowsAffected 不是所有数据库驱动都支持。本文区分执行错误、可信影响行数、零行结果和驱动不支持,给出不误判、不重复执行的处理方式。471 收藏 -
go tool pprof 的 -http 参数可以显式指定 Web 界面的 host:port。本文用实际调试场景区分 profile 数据源与界面监听地址,并说明 127.0.0.1、0.0.0.0、固定端口和随机端口的取舍。471 收藏 -
Go 的 append 是否修改调用方,关键取决于切片共享的底层数组和剩余 cap。本文拆解 len、cap、返回值、三下标切片与复制边界。471 收藏 -
区分 Go debug/dwarf 中两个 SeekPC 的查询对象,按地址空间、DWARF 范围和返回地址偏移排查 ErrUnknownPC,并给出重复查询的索引方案。471 收藏 -
Quit执行SMTP协议退出,Close直接关闭连接。通过原创生命周期示例与两张结构图,说明Quit失败时的清理兜底、错误保留和邮件业务结果的区别。471 收藏 -
用一个短时长 Go time.Timer 最小复现 Stop 后仍收到事件的现象,解释 Go 1.23 前后的通道语义差异,并给出不会误阻塞的兼容处理方式。471 收藏 -
Go ast.CommentMap 不是按注释语义做绑定,而是依据源码位置、空行和重要节点边界选择关联对象。本文解释注释落到外层声明的原因,并说明 AST 改写时如何同步更新映射。471 收藏 -
Go crypto/x509.ParseRevocationList 可以把 ASN.1 DER 编码的 X.509 v2 CRL 解析为 RevocationList。本文说明如何从 PEM 取出 DER、读取撤销证书条目,并区分解析、旧字段和签名校验边界。471 收藏 -
sync.Pool 取出的对象不一定是新对象,Get 也可能把池视为空并调用 New。本文用 bytes.Buffer 说明为什么要在 Get 后重新初始化业务状态、在 Put 前清理临时数据,以及怎样划分调用方持有边界。471 收藏 -
Go plugin 的 Lookup 找不到符号时,先区分插件打开失败与符号查询失败,再检查导出规则、名称拼写、构建方式和宿主插件的工具链一致性。470 收藏 -
Go database/sql 的连接等待不等于请求超时。本文用分阶段计时结合 DBStats 增量,区分获取连接与操作阶段失败,说明 MaxOpenConns、共享统计和上下文预算的判断边界。470 收藏 -
Go slog 不会自动把 context.Context 中的值写入日志。本文区分 Info 与 InfoContext、Logger.With 固定属性和自定义 Handler 读取上下文字段的边界,给出安全的排查与实现方式。470 收藏