Go语言技术文章
-
Go 自定义 MarshalJSON 时直接再次编码原类型会无限递归。本文说明 json.Marshaler 的触发原因,并用新的定义类型复用默认字段编码、追加自定义字段,同时保留错误处理边界。169 收藏 -
Go context 的 Done 只能通知退出,Err 只能说明取消类别。本文用 WithCancelCause 和 Cause 区分超时、主动取消与业务失败,并解释父子 Context 首次取消的传播边界。169 收藏 -
区分 tcell Show 的日常显示提交与 Sync 的全量重同步,用固定版本事件示例说明普通变化、主动重绘和尺寸事件的取舍,并排除业务状态、布局及外部输出干扰。168 收藏 -
Go 1.22 的 slices.Concat 可以把多个同类型切片按传入顺序合并成新切片。本文用最小示例说明顺序、空切片、nil 结果、自定义切片类型,以及它与 append 的选择边界。168 收藏 -
Go 中 errors.As 取不到自定义错误字段,通常不是字段不存在,而是目标类型、指针层级或错误链没有对上。本文从故障现场拆开直接返回、%w 包装、值与指针接收者和 Unwrap 的边界,给出可复查的修复清单。166 收藏 -
Go HTTP 连接未复用先查响应体读取关闭与共享 Transport。通过有限响应体封装和 httptrace 说明 HTTP/1.x、HTTP/2、取消及连接池边界,避免把 Close 或延迟变化当作复用保证。165 收藏 -
Go Transport 的 MaxConnsPerHost 限制拨号、活动和空闲连接总数,达到上限可能让请求等待。本文用 HTTP/1 示例解释共享池、trace 信号和响应体释放,并说明 HTTP/2 与调参边界。165 收藏 -
Go net.Buffers 可以把多个字节切片作为一次写入组织起来。本文从协议拼包场景出发,说明 WriteTo 的使用方式、已写字节数与错误处理,以及空片段和缓冲区复用的边界。164 收藏 -
Go 的 cmp.Equal 默认按切片下标比较,元素相同但顺序不同仍会判不等。本文用 cmpopts.SortSlices 为基本类型和结构体切片提供确定性排序规则,并说明重复元素、nil 与空切片的边界。162 收藏 -
Go maps.Copy 会把来源 map 的键值写入目标 map,同名键由来源覆盖。本文围绕默认配置、文件配置和环境覆盖说明调用顺序、nil 目标与嵌套 map 的浅层边界。162 收藏 -
解释 Go Goldmark 中普通回车、显式硬换行和 WithHardWraps 的渲染差异,并给出中文文本选择 LineBreakStrategy 的判断方法。161 收藏 -
Go tview 中,后台 goroutine 不要直接修改界面 primitive。把变更放进 Application.QueueUpdate 或 QueueUpdateDraw:前者只保证串行执行,后者执行后立即重绘;事件处理器内部则直接修改并交给主循环绘制。159 收藏 -
Badger 的 Value 回调参数只适合在回调内读取,ValueCopy 则把值复制到调用方切片。本文对比两种接口的生命周期、资源释放和长事务中的选择方式。159 收藏 -
说明 Go Ristretto 中 NumCounters 与 MaxCost 的职责差异,帮助你按访问频率和成本容量分别配置缓存。159 收藏 -
bbolt 的 View 回调里再次调用 Update 可能长期阻塞。本文解释单写事务与读事务的生命周期关系,给出读取结果复制到事务外、再独立写入的处理方式,以及回滚、告警和复盘清单。158 收藏