Go语言技术文章
-
Go 1.27 支持具体类型声明泛型方法,但类型参数只出现在返回值时,方法调用仍可能无法完成类型推断。本文给出显式类型实参、目标指针、解析回调和具体包装方法四种改法,并说明规模化 SDK 的取舍。355 收藏 -
Go 1.27 的 jsontext.Value 可保存一个原始 JSON 值,但直接转换、Clone、IsValid、MarshalJSON 与 Encoder.WriteValue 的职责不同。本文从切片复用导致内容变化的现象出发,给出安全保存、结构体透传和再次编码方案。378 收藏 -
Go 1.27 支持具体类型的泛型方法,但泛型方法仍不能直接满足普通接口方法。本文从方法签名、方法集、接收者和约束位置排查,并给出泛型类型、顶层函数与适配器三种修复方案。177 收藏 -
encoding/json/v2 默认忽略未知 JSON 成员,严格接口可用 RejectUnknownMembers 定位错误,需要透传时可用 embed fallback 保留扩展字段。本文按旧客户端、新客户端、严格命令和网关转发四类场景给出兼容策略与回归清单。141 收藏 -
Go 1.27 支持具体类型泛型方法,但指针接收者的方法集和可寻址规则没有改变。本文用可编译与不可编译示例说明变量、map 元素、临时值、方法表达式和接口调用的限制。249 收藏 -
Go 1.27 的 encoding/json/v2 可用 StringifyNumbers 把数字编码为 JSON 字符串。本文对比调用级选项与字段级 string 标签,给出旧客户端兼容、严格解码、精度测试和灰度退出方案。493 收藏 -
迁移到 encoding/json/v2 时,*T 字段遇到 null 会变成 nil,但缺失与 null 仍可能混在一起。本文用策略表、存在性感知类型和表驱动测试完成兼容处理。235 收藏 -
以 Go 1.27 泛型方法为背景,演示如何保留旧 Loader 接口、提取共享核心、增加具体类型泛型方法和包级适配函数,并按可回滚顺序迁移调用方。377 收藏 -
Go encoding/json/v2 的 MarshalFunc 不会全局注册。自定义格式化器不生效时,应依次检查 Go 版本与导入路径、WithMarshalers 是否传入同一次调用、泛型目标类型、JoinMarshalers 顺序和选项覆盖。260 收藏 -
围绕 Go 1.27 泛型方法说明接收者参数、方法参数和类型约束的关系,结合 List[T].Map[R] 讲清类型推断、显式实例化、方法表达式与接口边界。238 收藏 -
json/v2 中 omitzero 按 Go 零值判断,omitempty 按 JSON 空值判断。本文用字段类型、IsZero 和迁移清单说明如何选择。461 收藏 -
Go workspace 中,go.work 的 go 与 toolchain 指令负责 workspace 启动时的工具链要求;每个 go.mod 的 go 指令仍决定对应模块的最低版本和语言语义。go.work 的版本不能低于任何 use 模块。230 收藏 -
Go 1.26 默认启用 Green Tea GC,但 nogreenteagc 是构建时退出开关。本文说明为什么启动旧二进制时临时设置环境变量无效,并给出重建、留痕、灰度和回滚清单。290 收藏 -
Go 的 context.WithoutCancel 可以让收尾任务不继承请求取消,但它没有 deadline 和 Done;正确做法是再包一层独立超时,并复制必要数据。445 收藏 -
Go 1.21 以后 toolchain 会依据 go.mod、go.work 和 GOTOOLCHAIN 选择版本。本文说明离线环境如何区分自动下载、PATH 预装和版本要求,并给出不触发网络下载的配置与验证清单。223 收藏