Go问答技术文章
-
Go 的 QueryRow 查询不到记录时,错误会在 Scan 阶段以 sql.ErrNoRows 返回。本文从查询条件、errors.Is、NULL 字段、类型转换和上下文五个角度排查,区分无数据与真正的数据库故障。233 收藏 -
sql.NamedArg 只把名称和值交给 database/sql 与具体驱动,并不会统一不同数据库的命名占位符。本文说明名称校验、驱动能力和 SQL 语法三个拒绝点,并给出可直接套用的排查代码。233 收藏 -
Go 容器中的 SystemCertPool 为空或加载失败时,按根证书文件、SSL_CERT 路径、镜像依赖和私有 CA 四层定位并修复。233 收藏 -
Go mutex profile 统计的是竞争锁时其他 goroutine 的近似累计等待时间,本文解释 Unlock 归因、采样率设置、导出查看和常见误判。232 收藏 -
Go 服务收到停机信号后仍有请求进入,通常是监听器尚未关闭或摘流量与停机之间存在窗口。本文用 draining、显式 Listener 和 Server.Shutdown 完整处理。232 收藏 -
Go encoding/xml 中 xmlattr 并不是独立的命名空间开关。本文说明 ,attr、namespace-URL local,attr 与 xml.Name.Space/Local 的关系,并给出 MarshalXMLAttr 和 UnmarshalXMLAttr 的边界用法。231 收藏 -
Go select 的 default 在没有就绪通信时会立即返回,放进永久循环容易造成忙等。本文给出删除 default 的阻塞写法、time.Ticker 退避方案,以及 channel 关闭、nil channel 和 context 取消的排查清单。231 收藏 -
Go 将 JSON 解码到 map[string]any 时数字默认变成 float64。本文用 UseNumber、结构体和边界转换方案保留整数与高精度数字,避免 ID 和金额失真。230 收藏 -
Go 中同一算法只因数据类型不同而重复时适合使用泛型;不同类型需要不同方法实现、调用方只关心行为时更适合接口。本文用 Map 与 io.Reader 对比,并给出四项选择检查。230 收藏 -
Go workspace 中,go.work 的 go 与 toolchain 指令负责 workspace 启动时的工具链要求;每个 go.mod 的 go 指令仍决定对应模块的最低版本和语言语义。go.work 的版本不能低于任何 use 模块。230 收藏 -
解释 Go gzip.Reader 为什么要在完整读取后仍然 Close,并演示如何分别处理 ErrChecksum、os.File 和 HTTP 响应体的关闭责任。229 收藏 -
strings.EqualFold 按 Unicode 简单大小写折叠直接判断两个 UTF-8 字符串,而 strings.ToLower 是把字符单向映射成小写。本文用希腊 Sigma、德语 ß 和组合字符说明两者差异、适用场景与工程边界。229 收藏 -
go generate 默认在包含指令的 Go 包源目录运行。本文从工作目录、相对路径、环境变量和模块根目录入手,排查命令找不到、输入为空与生成文件落错位置等问题。229 收藏 -
Go 的 StdEncoding 会保留 Base64 的 = 补位,RawStdEncoding 使用相同字母表但省略补位。本文用输入长度、编解码配对和 URL 字母表三个边界说明如何选择。228 收藏 -
Go 官方建议不要把 Context 保存进结构体,因为请求级取消、deadline 和值的生命周期会被对象复用混在一起。本文用按调用传递、生命周期检查和 net/http 兼容性例外说明该规则的边界。227 收藏