Go语言技术文章
-
Go HTTP Client 连接不复用时,先用可观测的 Body 包装器确认 Close,再用 httptrace 判断连接是否进入复用池,并检查 Client 与 Transport 的生命周期。311 收藏 -
Go http.Client 默认会跟随重定向。本文用 CheckRedirect 和 http.ErrUseLastResponse 保留原始 3xx 响应,说明 Location、请求头、响应体及普通错误返回的边界。458 收藏 -
Go 并发代码里,atomic.Pointer[T] 适合发布一个可整体替换的指针,sync.Mutex 适合保护多个字段组成的不变量。本文按读写模式、对齐和混用风险给出选择方法。337 收藏 -
Go 的 encoding/xml.Marshal 会按 XMLName、xml.Name、字段标签和类型名决定元素名称。本文用一个订单报文示例说明如何固定根节点、表达命名空间、把字段输出成属性,并用嵌套路径组织子元素。278 收藏 -
atomic.Value 先保存 int 后保存 string 为什么会 panic?本文解释 any 背后的动态具体类型,并用固定 Snapshot 外层结构安全承载多种业务数据。494 收藏 -
使用 Go 的 encoding/xml 解析重复出现的嵌套元素时,把匹配字段声明为切片即可逐项接收;再结合 XMLName、属性标签和命名空间 URI 约束结构,避免同名节点映射错位。380 收藏 -
把 atomic.Int64 放进结构体时,优先让类型承担 64 位对齐,并配合不复制、统一原子读写和 32 位构建检查,避免裸 int64 的未对齐访问风险。428 收藏 -
Go 的 encoding/xml 遇到带嵌套标签的混合文本时,直接映射结构体容易忽略空白。本文用 Token、CharData、XMLName 和命名空间字段完成可控读取。168 收藏 -
Go 测试中不要直接清空或复制已使用的 sync.Once。本文解释初始化、panic、并发和复制边界,并给出用实例工厂实现测试隔离的写法。384 收藏 -
Go 的 encoding/json 把未知 JSON 数字默认解码为 float64,转入 interface{} 后可能丢失大整数精度。本文用 UseNumber、json.Number、RawMessage 和明确字段类型分别处理动态 JSON、多态字段与业务 ID。330 收藏 -
Go sync.Once 卡住时,先从初始化 goroutine 的栈确认阻塞资源,再排除重入、锁闭环和无界外部 I/O;需要重试时使用显式状态或新的拥有者,不要直接清零 Once。199 收藏 -
用 Go json.Decoder 读取连续 JSON 对象时,区分正常 io.EOF、语法损坏、截断输入和类型错误,并用 RawMessage 处理多态载荷。411 收藏 -
sync.Once 的初始化函数 panic 后不会自动重试。本文解释 Do 的完成语义、recover 的正确位置、OnceFunc 的差异,以及需要重试时的替代设计。428 收藏 -
Go 接口返回多态 JSON 时,可先用 json.RawMessage 保留 payload,再根据 kind 选择目标结构体二次解码,并明确处理 null、未知字段和未知类型。229 收藏 -
Go 结构体同时保存 map 和 sync.Mutex 时,值接收者会复制锁而不是复制同一把锁。本文说明 map 与 mutex 的复制差异,并给出指针接收者、Mutex/RWMutex 选择和竞态排查方法。199 收藏