Go问答技术文章
-
Go 1.26 新增的 errors.AsType 用泛型返回具体错误类型,省掉 errors.As 中声明目标指针和传入地址的样板写法。本文说明包装错误、自定义 As、errors.Join 与旧版本兼容边界。221 收藏 -
Go 的 runtime.SetFinalizer 只在对象不可达后安排清理,函数里的最后一次使用不一定能把对象保活到系统调用结束。本文用非内存句柄场景拆解对象可达性、runtime.KeepAlive 的放置位置、finalizer 的边界与工程选型。221 收藏 -
解释 Go sql.DB.Stats 中 WaitCount 持续增长的含义,区分连接池等待、数据库变慢和资源未释放,并给出窗口采样与参数排查方法。220 收藏 -
使用 httptest.ResponseRecorder 测试 Go HTTP handler 时,Code 可能因 recorder 的创建方式和写入时机呈现不同结果。本文用最小示例解释 Code、Result().StatusCode、Header 与 Body 的读取边界,并给出稳定的排查清单。219 收藏 -
Go 1.24 的 net/http.Protocols 是协议能力集合。本文用 https、http 与 h2c 三种场景说明客户端和服务端配置不一致时何时回退、何时失败,并给出配置与排查清单。219 收藏 -
Golang · Go问答 | 3星期前 | 错误处理 · 事务 · database/sql · Go问答 · Go database/sql Tx Go事务重试 Go死锁处理 Go序列化冲突 database/sql错误分类
围绕 Go database/sql Tx 讲清可重试并发冲突与业务错误的边界:驱动错误映射、单次事务回滚、事务外有限重试以及提交状态未知时的幂等处理。218 收藏 -
gzip.Writer.Reset 会让对象回到类似刚由 NewWriter 创建的状态,只保留可复用的压缩器与压缩级别,不继承上一条流的 Header。本文说明正确复用顺序、Header 重配和对象池边界。218 收藏 -
token.Pos 是 Go FileSet 中的全局位置值,不是单个源文件的字节下标。本文说明如何通过 token.File.Offset 转换文件内偏移,并处理 NoPos、跨文件和 //line 行列映射。218 收藏 -
Go 普通 map 并发读写时,runtime 的 map 专用检查可能先触发 fatal,而 race detector 只有在使用 -race 构建且冲突路径实际执行时才会报告。本文给出识别、止血、定位和修复方法。218 收藏 -
围绕 httptest.ResponseRecorder 说明 Handler 响应测试的边界,演示 Result、Code、Header 和 Flushed 的正确检查方式,并比较何时应该使用 NewServer。217 收藏 -
Go comparable 约束拒绝包含切片字段的结构体,是因为结构体必须保证所有字段都可比较。本文拆解切片、数组、指针和接口字段的边界,并给出固定数组、摘要键与身份指针的改造选择。217 收藏 -
本文解释 Go 原子类型为何禁止首次使用后复制,演示副本如何变成独立内存位置,并给出指针所有权、API 设计和 go vet 排查方法。217 收藏 -
从平台、路径、工具链、构建标签、共同依赖和符号查找六个边界排查 Go plugin 加载失败,给出可复现的 Open/Lookup 错误判断方法。216 收藏 -
Go base64.DecodeString 返回 CorruptInputError 时,错误值就是需要排查的零基字节偏移。本文用 errors.As 提取位置,结合上下文、字母表、补位、UTF-8 和 Strict 模式,区分非法字符与输入截断。216 收藏 -
multipart.ReadForm 会把超出内存预算的文件部分落到临时目录,Form.RemoveAll 用于删除这些临时文件。本文区分 net/http Server 自动清理与独立解析时必须手动清理的边界。216 收藏