Go问答技术文章
-
Go 接口输入不必把清洗、字段校验和前端契约拆成三套规则。本文用一个原创注册请求示例说明如何组织原地规范化、错误处理、JSON Schema 生成,以及何时应切换到带上下文的显式 Pipeline。287 收藏
-
errors.Join 会先丢弃 nil,并统计剩余错误;当非 nil 数量为零时直接返回 nil。文章结合结果矩阵、标准库源码、错误树检查和 typed nil 边界说明这一设计。284 收藏 -
Go 内置 copy 对源和目标切片的重叠有语言规范保证,复制结果不受内存区间是否重叠影响。本文给出切片左移删除、右移插入的可靠写法,并说明返回数量、容量和并发边界。283 收藏 -
在 Go 泛型约束中,~T 表示底层类型为 T 的全部类型,因此既能接受预声明类型,也能接受以它为底层类型的自定义类型;但方法仍须在约束中显式声明。282 收藏 -
Go pprof 火焰图中占比最高的函数不一定是最佳优化点。本文结合 flat、cum、调用路径和业务基线,说明如何判断真正值得优化的 CPU 热点并安全复测。282 收藏 -
Go text/template 遇到嵌套 define 同名覆盖时,按关联模板、Parse 顺序、文件基名和 ExecuteTemplate 入口逐项定位,避免执行到错误定义。281 收藏 -
sync.Pool 取出的对象带着上一次请求的字段时,问题通常不是 Pool 失效,而是复用对象没有在交接边界清理。本文从临时对象契约、Reset 设计、Get/Put 时机和不适合放入 Pool 的状态四个方面,整理一套可落地的排查方式。278 收藏 -
context.WithValue 出现字段覆盖时,通常不是值被修改,而是相同键在父子 Context 中发生遮蔽。本文用包内私有键类型和类型安全访问器规避跨包冲突。277 收藏 -
Go 多模块工作区会把 use 中的本地模块同时视为主模块,可能遮住单个 go.mod 的依赖缺口。本文说明怎样用 GOWORK=off 复现独立构建、比较依赖边界,并用 require、可发布版本和 CI 单模块测试修复。274 收藏 -
html/template 并不是简单地把所有字符串统一转义,而是根据插值所在的 HTML、属性、URL、JavaScript 或 CSS 上下文选择处理方式。本文用最小示例排查转义异常、ZgotmplZ 和安全类型误用。274 收藏 -
json.Unmarshal 解码到 interface{} 或 map[string]any 时,JSON number 默认会落为 float64,可能让大整数标识失去精度。本文对比强类型字段、Decoder.UseNumber 和字符串 ID 三种方案,给出错误处理与安全复查清单。273 收藏 -
Go fuzz 失败语料只有在环境可重建时才真正可复现。本文把 time.Now 与包级随机函数改成可注入时钟和局部随机源,并将时刻偏移、随机种子纳入语料。273 收藏 -
C 回调进入 Go 时,关键不是猜线程会不会变化,而是明确运行时接入、线程局部状态、C 指针生命周期、cgo.Handle 和停机顺序。271 收藏 -
解释 Go 单次 iter.Seq 被重复 range 时的真实行为,对比完整消费与提前停止,并给出快照、工厂函数和 API 注释等安全设计方式。270 收藏 -
Go 客户端配置 TLS 会话缓存后仍可能频繁完整握手。本文区分 HTTP 长连接复用与 TLS 会话恢复,说明 ClientSessionCache、ServerName、进程、LRU 容量和多节点票据密钥的边界,并给出 DidResume 排查写法。270 收藏