Go语言技术文章
-
Go 测试里的 ticker 泄漏,常见根因不是 Stop 单独缺失,而是 goroutine 一直阻塞在不会自动关闭的 ticker.C 上。本文用 done、Stop 和 WaitGroup 给出完整收尾方式。210 收藏 -
Go 的 encoding/json 把 JSON 数字写入 int 时,如果数值超出目标类型范围,会返回 UnmarshalTypeError,而不是自动截断或安全放大。本文从溢出边界、错误定位、字段设计和 UseNumber 四个角度说明怎样处理。451 收藏 -
Go 1.22 及更高版本可以用 http.Request.SetPathValue 在单元测试中注入路径变量,再通过 PathValue 让处理器按生产代码读取。本文区分处理器测试与 ServeMux 路由测试,并说明空值、覆盖和编码边界。496 收藏 -
Golang · Go问答 | 3小时前 | 结构体 · JSON · 指针 · go · 接口设计 · encoding/json · encoding/json 结构体字段 可选字段 指针字段 字段缺失 Go JSON null
Go encoding/json 处理 JSON null 时,指针字段会变成 nil,而普通结构体字段通常保留原值。本文用复用旧对象的最小示例拆开字段缺失、显式 null 和具体对象的差异,并给出可选字段与三态接口的建模方法。272 收藏 -
Golang · Go问答 | 3小时前 | 反射 · panic · go · 类型转换 · Go strconv reflect.Value.Convert CanConvert ConvertibleTo
reflect.Value.Convert 只执行 Go 允许的类型转换,不负责把字符串解析成数字。本文说明 CanConvert 与 ConvertibleTo 的使用边界、strconv 解析文本的方法,以及 slice 转 array pointer 时必须补充的长度检查。192 收藏 -
通用字段读取逻辑经常同时遇到普通值、指针和接口包装值。本文只围绕 reflect.Value 的 Kind 与 Elem,给出安全归一化、nil 处理和按最终 Kind 读取字段的 Go 写法。230 收藏 -
Go errors.Join 会忽略真正 nil,全部成功返回 nil。通过可选检查示例解释混合输入、错误成员识别及带类型空指针的返回陷阱,并给出聚合错误的适用约定。489 收藏 -
fmt.Errorf 中的 %w 会保留底层错误并建立可遍历的错误链,%v 只把错误格式化为消息文本。本文用最小示例说明 errors.Is 找不到原始错误的原因、排查方法和自定义包装边界。453 收藏 -
Go 接口只有动态类型和动态值同时为空时才等于 nil。把值为 nil 的具体指针返回给 error,会让接口携带该指针类型,从而出现 err != nil。本文用最小示例说明原因、观察方法和正确修复方式。140 收藏 -
Go url.PathEscape 直接处理路径片段时会把斜杠编码为 %2F;如果观察到斜杠,通常是读取了解码后的 URL.Path,或混用了路径拼接与查询参数编码。本文用最小示例区分 PathEscape、QueryEscape、RawPath 和 EscapedPath。462 收藏 -
Go crypto/subtle.WithDataIndependentTiming 用于在回调期间启用架构相关的数据独立时序能力,但不会把普通变长代码自动变成常量时间。本文用 ConstantTimeCompare 说明正确包法、goroutine 作用域、架构差异和安全边界。391 收藏 -
Go map 在 range 期间新增键可能被访问,也可能不会被访问。本文区分单协程修改与并发读写,给出键快照和显式待处理队列两种稳定方案。444 收藏 -
Go sync.RWMutex 的 RLocker 会把读锁能力适配为 sync.Locker:调用 Lock 实际执行 RLock,调用 Unlock 实际执行 RUnlock。本文用通用组件、读写生命周期和边界示例说明怎样安全复用它。261 收藏 -
Go 在 ARM、386 和 32 位 MIPS 上对 64 位原子操作有额外的对齐要求。本文从结构体字段布局入手,说明如何识别中间字段错位、改用类型化原子类型,以及必须使用旧式函数时怎样重排字段。228 收藏 -
sync.Map.Range 能遍历当前可见的键值,但它不提供一致性快照。本文用并发缓存盘点示例说明 Store、Delete 与 Range 的可见性边界,并给出锁、版本号和独立快照三种更可靠的判断方式。392 收藏