Go语言技术文章
-
从 go-toml v1 的 Tree/Get 读取迁移到 go-toml/v2 结构体解码,关键不是机械替换函数,而是重写模块路径、字段映射和动态配置边界。本文用最小改造示例说明 Unmarshal、Decoder、严格字段与 DecodeError 的取舍。286 收藏 -
go-toml/v2 默认会忽略目标结构体没有的配置键。本文用 Decoder.DisallowUnknownFields 拒绝未声明字段,并说明 StrictMissingError、嵌套结构体与 map 的边界。158 收藏 -
go-toml 将不携带时区关系的本地日期、时间和日期时间,与带偏移的时间点分开处理。本文用 TOML 字面量、LocalDateTime、time.Time 和 AsTime(zone) 说明两者的语义边界与选型方法。419 收藏 -
Go go-toml v2 自定义 TOML 解码的完整做法:实现 unstable.Unmarshaler、启用 Decoder 接口,并处理嵌套表、默认值和业务错误边界。303 收藏 -
go-toml/v2 可以把 TOML 的 [[servers]] 表数组直接解码到 Go 的 []Server。本文从结构体标签、Unmarshal、流式 Decoder、严格未知字段和 DecodeError 几个边界,整理一套可直接复用的写法。106 收藏 -
把 Viper 的配置优先级转成 Koanf 显式加载顺序,处理未传参数、空环境变量、代码覆盖与快照重载,给出受控来源合成示例。224 收藏 -
Koanf 默认允许后加载的同名键覆盖前值,类型不同也不会自动报错;开启 StrictMerge 后,冲突会在 Load 时返回错误。本文用 map、字符串和切片说明合并边界,并给出多来源配置的落地策略。366 收藏 -
用 Koanf env/v2 将带应用前缀的环境变量映射成嵌套配置键,说明双下划线、允许键集合、值转换和覆盖顺序,并给出受限配置示例。116 收藏 -
Go Koanf 默认用分隔符把配置键解释为路径。当字面键名和嵌套路径展开后得到同一个扁平键时,查询就可能命中另一层。本文说明冲突原因,并给出改用斜杠分隔符和配置边界翻译的处理方式。331 收藏 -
Go Koanf 已经加载整份配置时,可以把目标路径传给 Unmarshal,只将一个子树映射到结构体。本文集中排查路径、koanf 标签、字段形状和 FlatPaths 的边界。112 收藏 -
用 Koanf 先加载文件配置,再用带前缀的环境变量覆盖指定键。本文说明 env/v2 的键名转换、加载顺序、类型覆盖、结构体解码和严格合并边界。335 收藏 -
说明 Go Ristretto 中 NumCounters 与 MaxCost 的职责差异,帮助你按访问频率和成本容量分别配置缓存。159 收藏 -
Ristretto v2 可以用 SetWithTTL 为每个缓存键设置独立过期时间,GetTTL 则能读取剩余 TTL 并区分未找到和永久缓存。本文从一个缓存同时保存短时与长时数据的场景出发,说明 Wait、返回值、容量淘汰和 TTL 到期之间的排查边界。211 收藏 -
区分Ristretto写入缓冲、Set返回值与策略接纳,说明Wait为何不能保证命中,并给出诊断片段、TTL与成本排查及缓存未命中回源写法。395 收藏 -
Ristretto 的 MaxCost 只定义成本上限,新条目仍可能在 Set 缓冲或 TinyLFU admission 阶段被丢弃。本文用 Wait 和 Metrics 区分异步可见性、缓冲丢弃与准入拒绝,并给出调用策略。359 收藏