Go语言技术文章
-
Go AST 改写后要恢复文件注释列表,应在解析时用 ParseComments 创建 CommentMap,替换节点时调用 Update,改写完成后用 Filter 清理已删除节点,最后用 Comments 按源码顺序取得有效注释组。176 收藏 -
Go 的 io.TeeReader 可以在读取输入流的同时,把已经读到的字节同步写入另一个 io.Writer。本文用 bytes.Buffer 和 io.Copy 说明它的调用关系、无缓冲特性、错误传播方式,以及只复制实际消费数据时的边界。175 收藏 -
围绕 Go http.Transport 的 HTTP 代理 CONNECT 握手,说明固定请求头与按目标动态请求头的配置边界,并整理旧代码迁移和回归检查清单。175 收藏 -
Go weak.Pointer 不会阻止对象被垃圾回收。本文用两个小例子说明 weak.Make、Value、nil 判断和 runtime.KeepAlive 的生命周期边界,并区分弱引用缓存与确定性资源释放。175 收藏 -
Go flag 包中,解析后的变量值不能单独证明参数是否由用户传入。本文用 Visit 和 NFlag 判断实际设置项,再处理显式空字符串、布尔参数、默认值与配置合并的边界。175 收藏 -
用 http.NewServeMux 创建独立路由表,注册固定路径和 Go 1.22+ 方法模式,再把 mux 显式交给 http.Server,避免测试或多服务场景误用全局 DefaultServeMux。175 收藏 -
Go x/net/html.Tokenizer 的 Token 会把实体、标签名和属性转成结构化数据,因此不能当作原始 HTML 的无损副本。本文用 Raw、Token 和低级 API 对比保留边界,给出按 token 复制原始字节的写法。175 收藏 -
errors.Join合并错误后,应通过errors.Is匹配目标哨兵。本文用完整清单检查示例演示保留%w包装、合并独立问题和同时提示多个类别,并解释同文案错误、nil、Unwrap与As的边界。175 收藏 -
Go encoding/binary.Decode 适合把固定布局的字节切片按 LittleEndian 或 BigEndian 解析到结构体。本文说明字段限制、返回字节数、缓冲区不足,以及 Decode、Read、Encode 的选择。175 收藏 -
plugin.Open 返回不兼容错误时,先检查应用和插件是否使用相同的 Go 工具链、构建标签、环境变量与共享依赖源码,再决定是否重新统一构建或改用 IPC。175 收藏 -
testing.T.Setenv 不会返回 error,设置失败会直接让测试失败;并行测试还会触发额外限制。本文区分 t.Setenv、os.Setenv、Fatal 输出和并发冲突,给出稳定的 Go 测试写法。175 收藏 -
go/version.IsValid 判断的是带 go 前缀的 Go 工具链版本语法。本文用一个最小项目拆解前缀、数字段、预发布标记和自定义后缀,定位 1.23、前导零及补丁后预发布写法被拒绝的原因。175 收藏 -
用 Go iter.Pull 把 iter.Seq 转成 next/stop 逐项读取,区分零值与结束信号,处理空输入和提前退出,并说明业务错误如何保持清晰边界。175 收藏 -
go/types.Tuple 描述有序变量列表,不是业务多返回值的运行时容器。通过签名读取示例,区分 Var 元信息、分别接收返回值和用结构体整体保存数据。175 收藏 -
Go常量位移调用前应保留原始计数的符号与精确信息,再检查参数范围和工具预算。本文给出有界适配函数,并区分语言语义、宿主uint与目标平台。175 收藏