Go问答技术文章
-
Go CEL 的 cel.DynType 只放宽静态类型检查,不会替运行时输入自动转换类型。本文结合动态字段、操作符重载、类型守卫和短路条件,说明为什么 Compile 成功后 Eval 仍可能报错。211 收藏 -
Go 测试里的 ticker 泄漏,常见根因不是 Stop 单独缺失,而是 goroutine 一直阻塞在不会自动关闭的 ticker.C 上。本文用 done、Stop 和 WaitGroup 给出完整收尾方式。210 收藏 -
对比 go-diff 的语义清理与效率清理,说明阅读体验、编辑成本和 DiffEditCost 的区别,并用独立副本及文本重建示例解释选择与改造方法。210 收藏 -
Go token.FileSet.RemoveFile 后,原来的 Pos 区间不会再被 FileSet.File 或 FileSet.Position 找到,但保留的 *token.File 仍可用于文件级位置换算。本文拆开两层语义,并给出适合流式解析器的释放顺序。210 收藏 -
runtime.Gosched 只能让出当前处理器,不能替代 channel、锁或条件等待。本文从调度语义、GOMAXPROCS、忙等和阻塞边界出发,给出把无效让出改成可控同步的排查方法。209 收藏 -
Go pprof 阻塞 profile 没有数据时,重点检查 SetBlockProfileRate、pprof 路由、采集窗口和真实阻塞事件。本文给出最小配置、读取命令和排查边界。209 收藏 -
Go 的 URLEncoding 和 RawURLEncoding 使用同一套 URL-safe 字母表,但一个保留等号填充、一个去掉填充,因此不能随意交叉解码。本文从错误现象、协议边界和历史数据兼容三个角度说明如何选择编码器。209 收藏 -
Go database/sql 的 Tx.Commit 会把提交动作交给底层驱动,连接中断、事务上下文取消或事务已结束都可能让调用方得到错误。本文按错误边界说明如何判断提交结果,以及为什么不能对未知状态盲目重试。209 收藏 -
Go RIFF 声明长度超过实际输入时应返回截断错误。本文说明头部解析成功的限制,并给出总长度比较、块数据计数和完整扫描的处理写法。209 收藏 -
GOPROXY=direct 只负责绕过模块代理并直接访问版本控制仓库,私有依赖仍需正确配置 GOPRIVATE、认证方式和 GOVCS。本文按路径、认证、仓库发现与代理策略给出排查顺序。209 收藏 -
Go select 在多个通信 case 同时就绪时会从可继续的分支中选择一个,case 的书写顺序不是优先级。本文解释 ready 集合、default、关闭 channel 和两层 select 的边界,并给出需要显式优先级时的仲裁迁移方式。209 收藏 -
Golang · Go问答 | 1星期前 | HTTP · Cookie · Go问答 · 排错 · Go Set-Cookie http.Cookie ParseSetCookie Unparsed
Go net/http 解析 Set-Cookie 时,无法映射到 Cookie 已知字段的属性会以原始片段进入 Unparsed;语法错误则通过 error 返回。本文说明怎样读取 Unparsed、如何记录未知属性,以及为什么不能把 Cookie.String 当作未知属性的回写器。209 收藏 -
Go testing.T.TempDir 会在测试及其子测试结束后自动清理。本文用 T.ArtifactDir、-artifacts 和失败前复制说明怎样保留关键测试现场,同时避免把临时目录误当成长期产物。209 收藏 -
Go net/http 中 Request.Body 的关闭并不等于连接一定能复用。本文区分客户端请求体、服务端请求体和客户端响应体,说明 Response.Body 的读取与关闭、Request.Close、DisableKeepAlives 以及 HTTP/2 边界。209 收藏 -
Go 的 crc64.Update 不是每段独立计算,而是把新字节接到已有 CRC 状态上。本文用整块 Checksum 对照分片循环,解释为什么必须沿用上一次的返回值。209 收藏