Go问答技术文章
-
Go 中向已关闭 channel 发送会触发 panic。本文解释 close 后的发送、接收与再次关闭规则,并给出单生产者、多生产者和接收者提前退出时的安全责任划分。375 收藏 -
Golang · Go问答 | 2个月前 | golang · 连接池 · database/sql · Go问答 · 连接池 事务 DBStats rows.Close Go database/sql
Go database/sql 里漏掉 Rows.Close,问题往往不是某一次查询报错,而是连接长期被结果集占着,最终让连接池等待堆积。本文从 DBStats 指标和事务生命周期入手,复现现象,解释 Rows、Tx 与连接归还的关系,并给出可复查的代码边界。374 收藏 -
Go 结构体转 JSON 得到 {},通常是字段未导出、json 标签明确忽略字段,或所有字段被 omitempty 按零值省略。本文用最小示例和检查清单说明如何快速定位并修复。374 收藏 -
Go map 并发读写没有立刻崩溃,不代表代码安全。本文用 -race 定位冲突,说明普通 map 的锁封装方式,并比较 sync.Map 的适用边界。374 收藏 -
本文从 go/types.Info.InitOrder 出发,说明 Go 如何整理包级变量初始化项,并用 AST 与类型检查代码读取 Lhs、Rhs,区分 init 函数、跨包顺序和隐藏依赖。374 收藏 -
讲清 Go errors.Join 组合错误的树形关系,以及如何用 errors.Is 和 errors.As 保留单项错误匹配、类型提取和边界判断能力。374 收藏 -
Go archive/zip 的 Reader.Open 使用 io/fs 的正斜杠路径语义。本文说明反斜杠导致找不到条目的原因,并给出规范路径访问、原始名称精确匹配和 ErrInsecurePath 处理方案。374 收藏 -
Go gob 的接口字段会携带动态具体类型名称,接收端必须预先知道该名称对应的本地类型。本文说明 Register、RegisterName、指针类型与跨进程注册表的正确用法。374 收藏 -
Golang · Go问答 | 3星期前 | 标准库 · Context · 并发编程 · go语言 · 错误排查 · 后台任务 Deadline context取消 context.WithoutCancel Go排查
context.WithoutCancel 本身不会返回 Deadline,但后台任务仍可能从新派生的 WithTimeout 或误用的原始请求 Context 获得时间边界。本文用最小探针定位来源,并给出保留上下文值、脱离请求取消且仍可回收的写法。374 收藏 -
Golang · Go问答 | 3星期前 | 标准库 · 错误处理 · Go问答 · Go Content-Type mime.ParseMediaType ErrInvalidMediaParameter
Go mime.ParseMediaType 遇到可选参数格式错误时,可能返回已经识别出的媒体类型和 ErrInvalidMediaParameter,但参数映射不可继续当成完整结果使用。本文用返回组合、错误判断和降级策略说明怎样处理这一边界。374 收藏 -
说明 Go gzip.Writer.Close 为什么不能省略:它会完成压缩状态并写出 gzip 尾部信息。文章给出正确的 defer 关闭顺序,区分 Flush 与 Close,并整理读取不完整、底层关闭失败等排查边界。374 收藏 -
Go 二进制在 Alpine 启动失败时,应读取 ELF 架构、解释器和动态库需求,区分平台错误与 glibc/musl 不匹配。本文给出 readelf 排查命令,以及纯 Go 构建、musl 重编译和 glibc 运行环境的选择边界。374 收藏 -
Go 模块发布错误版本后,不要删除旧 tag 或覆盖原版本。本文说明如何在 go.mod 使用 retract 撤回单个版本或版本区间,为什么必须发布更高版本,以及如何用 go list 和 go get 核对撤回提示与兼容边界。374 收藏 -
netip.ParseAddrPort 不会为缺端口输入自动补值。本文将显式IP端点与裸IP分开,提供业务默认端口封装,保留空端口、越界端口和域名错误,并解释IPv6歧义、零端口及配置迁移边界。374 收藏 -
本文说明如何用带缓冲 channel 作为槽位池限制 Go 并发任务数,覆盖容量语义、槽位获取与释放、context 取消、WaitGroup 收尾,以及信号量和固定 worker 的选择边界。374 收藏