Go语言技术文章
-
Go context.WithValue 取不到值,通常不是 Context 自己丢了数据,而是写入和读取使用了不同的键类型、键值或 Context,或者取值后的类型断言不匹配。本文按这四个边界给出排查与封装方法。290 收藏 -
Go context 取消后下游查询仍在继续,通常不是取消函数失效,而是信号没有传到查询 API,或数据库驱动没有实现可取消路径。本文用 QueryContext、rows 生命周期和驱动边界逐层排查。467 收藏 -
Go reflect.Value.MethodByName 找不到方法时会返回零 Value,不能直接 Call。本文说明 IsValid 判断、导出方法与大小写、值接收者和指针接收者差异,以及反射调用前的签名检查。236 收藏 -
filepath.Glob 返回空结果不一定是模式写错:无匹配时 err 为 nil,模式语法错误时才会返回 filepath.ErrBadPattern。本文给出区分两类结果的写法,并补充跨平台路径和文件系统错误边界。220 收藏 -
通过可取消的四模式实验区分Go channel接收阻塞、nil通道和关闭状态,结合通道身份、发送路径与等待关系排查,并说明超时、len和goroutine栈能证明的范围。366 收藏 -
Go 的 url.Values.Get 在参数缺失和参数值为空时都会返回空字符串。要保留这两种语义,应使用 Has 判断键是否出现,或直接读取 map 中的 []string,并结合 ParseQuery 的错误处理统一封装。218 收藏 -
Go WaitGroup 出现 negative WaitGroup counter 通常是 Done 重复调用、Add 与 Wait 时序错误或批次复用不当。本文用最小示例、排查清单和安全写法定位计数失衡。432 收藏 -
Golang · Go问答 | 2天前 | 并发 · pprof · 性能排查 · Go问答 · Go Goroutine pprof net/http/pprof runtime/pprof 并发排障
Go goroutine 泄漏的关键不是单看数量,而是定位长期阻塞且再也等不到解除条件的代码行。本文从数量趋势、runtime/pprof 栈、channel 与锁的退出条件入手,给出可复用的排查和修复路径。446 收藏 -
区分Go Timer Reset的新旧通道语义、兼容设置与已投递业务事件,给出单拥有者处理方式和时间观察样例,解释Reset布尔值、旧通知清理及AfterFunc回调边界。137 收藏 -
Golang · Go问答 | 2天前 | 标准库 · 时间处理 · Go问答 · Go 时区 time.Parse time.ParseInLocation time.Location 时间偏移 RFC3339
Go time.ParseInLocation 解析结果看起来偏移,通常是无时区字符串被按不同 Location 解释,或把同一时刻的 UTC 展示误当成时间被修改。本文用 Parse、ParseInLocation、Zone、Location 和 Equal 拆解原因,并给出稳定的输入与排障写法。297 收藏 -
Go 的 time.Format 布局中的 MST 只是时区缩写占位符,不会单独完成时区转换。本文区分 MST、数值偏移、Location 和 In 的职责,并说明带缩写字符串解析时的零偏移边界。457 收藏 -
本文围绕 Go httptrace.PutIdleConn 解释连接回收到 Transport 空闲池时的 nil 与错误信号,并对比 DisableKeepAlives、响应体关闭和 HTTP/2 下的判断边界。422 收藏 -
Go 1.26 为 testing.T 增加 ArtifactDir:用它取得当前测试或子测试独立的产物目录,把失败现场写入其中;配合 -artifacts 和 -outputdir,本地与 CI 都能保留测试文件。196 收藏 -
encoding/json v1 解码到结构体时会优先精确匹配,也接受大小写不敏感的字段匹配,因此 JSON 键大小写不同仍可能填充结构体字段。本文解释标签、map、DisallowUnknownFields 与严格键名预检的边界,并说明 v2 的差异。467 收藏 -
Go HTTP 客户端收到响应后如果忘记关闭 Response.Body,Transport 可能无法复用持久连接,循环请求中就会出现空闲连接变少、重复建连和资源占用升高。本文按错误分支、读到 EOF、Client/Transport 复用三个层面给出排查和修复方式。251 收藏