Go问答技术文章
-
Go 的 sql.DB 是连接池句柄,而 sql.Tx 绑定事务连接。事务内部如果继续调用 DB.Query,查询可能落到另一条连接,读不到未提交数据。本文说明边界、改法与回滚收口。316 收藏 -
Go database/sql 中,rows.Close 后仍可调用 rows.Err。本文区分迭代错误、扫描错误和驱动关闭错误,给出读取型查询与提前关闭时不丢错的写法。136 收藏 -
Go 的 database/sql 中,QueryRow 没有记录不会立即返回错误,而是把结果放进占位 Row,直到 Scan 才返回 sql.ErrNoRows。本文说明延迟错误的原因、错误分支、NULL 字段和多行查询的选择。206 收藏 -
Go 的 regexp.Compile 失败时,先区分正则语法错误与匹配不到,再用 regexp/syntax.Error 读取错误类型和问题表达式,最后处理动态规则与 MustCompile 的边界。318 收藏 -
Go 模板 Parse 成功只说明模板文本通过了解析,Execute 仍可能因结构体字段、map 键、方法、函数注册、嵌套模板或 Writer 错误而失败。本文按执行边界整理排查顺序和最小示例。296 收藏 -
Go 的 os.File.Close 会返回 error。本文按文件用途和错误阶段说明什么时候必须返回、什么时候可记录,并给出同时处理 Write、Flush、Close 的写法。172 收藏 -
Go 的 os.ReadFile 面向普通文件,传入目录时出现错误通常是路径类型不匹配。本文解释 *os.PathError 的含义,并给出目录读取与错误判断的正确写法。254 收藏 -
Go 用 os.Stat 判断文件是否存在时,不能把所有非 nil 错误都当成不存在。本文区分缺失、权限不足和其他系统错误,并给出 errors.Is 的安全写法。471 收藏 -
Go 的 csv.Reader 把 FieldsPerRecord 设为负数后,不再检查每条记录的字段数量,适合列数可变的 CSV;本文同时说明它与正数、0 的区别,以及如何在业务层安全处理变长记录。342 收藏 -
Go 的 json.Decoder.Decode 成功一次不代表整个输入已经结束。本文用第二次 Decode 检查 io.EOF,区分额外 JSON 值与损坏尾部,并给出日志、灰度和回滚做法。212 收藏 -
Go 的 encoding/json 中,omitempty 不能按结构体零值隐藏普通 struct;本文解释原因,并给出指针与 omitzero 的选择方法。277 收藏 -
Go 的 json.Unmarshal 复用结构体时,JSON 缺失字段不会自动清零,旧指针可能因此残留。本文用最小示例区分缺失、null 与对象合并,并给出安全处理方式。404 收藏 -
Go 的 ResponseWriter 会在首个 Write 或 WriteHeader 时提交响应头,之后再修改 Header 或状态码通常不会生效。本文用 ServeHTTP 示例说明正确顺序、错误分支和特殊边界。107 收藏 -
Go 的 http.Server.Shutdown 返回错误时,不能只看 err != nil。本文区分 Shutdown、Serve 与 context 的错误语义,用 errors.Is 判断超时,并给出活动请求、长连接和强制退出的处理清单。372 收藏 -
Go 的 Response.Body 只 Close 不读到 EOF 时,HTTP/1.x 连接可能无法复用。本文按响应大小给出读取、关闭和排查 Transport 的实用写法。301 收藏