Go问答技术文章
-
sync.RWMutex 不支持把 RLock 升级为 Lock,读锁未释放时申请写锁会等待自己释放读锁而形成阻塞。本文用原创代码对比拆分读写临界区与直接使用单写锁的改造方案,并说明重新检查、锁复制和对象生命周期边界。395 收藏 -
本文从 database/sql 的调用路径出发,区分 sql.DB.Ping、PingContext 与 driver.Pinger.Ping 的职责,说明驱动怎样报告失活连接,以及应用如何把超时和单连接错误接回连接池策略。382 收藏 -
用 Go 的 utf8.DecodeRune 扫描可能含坏字节的 []byte 时,非法输入会返回 RuneError 和 size=1。本文用一个小型扫描器说明如何按 size 推进游标,避免重复读取同一字节造成循环不前,并覆盖空输入与混合输入边界。380 收藏 -
Go huh 中,字段 Validate 返回错误不会让表单退出;用户主动离开才会得到 huh.ErrUserAborted。本文按提交、取消、校验失败和运行时错误四个出口说明 errors.Is 与 Form.State 的用法。377 收藏 -
Golang · Go问答 | 9小时前 | 标准库 · 错误处理 · Go问答 · Go Content-Type mime.ParseMediaType ErrInvalidMediaParameter
Go mime.ParseMediaType 遇到可选参数格式错误时,可能返回已经识别出的媒体类型和 ErrInvalidMediaParameter,但参数映射不可继续当成完整结果使用。本文用返回组合、错误判断和降级策略说明怎样处理这一边界。374 收藏 -
Go database/sql 的 ColumnType.DatabaseTypeName 返回空字符串时,如何区分驱动能力缺失与查询错误,并用显式映射、ScanType 和 unknown 设计稳定的跨驱动回退。369 收藏 -
Go huh 动态选项未刷新时,应区分静态 Options、OptionsFunc 闭包和 bindings。通过区域与队列联动示例说明变量地址绑定、缓存、旧选择失配及空状态处理。367 收藏 -
反复调用 regexp.MatchString 时,包级函数会把正则编译带进热路径。本文拆开调用链,给出固定模式与动态模式两种缓存设计,并处理并发、编译失败和容量边界。364 收藏 -
Go 并发代码里,原子计数器并不会自动保护同一结构体中的普通字段。本文从快照偶发不一致的故障现场出发,说明混用为什么仍会产生竞态,并给出全原子、互斥锁和原子快照的修复边界。360 收藏 -
Go sync.RWMutex.TryLock 会尝试获得写锁并立即返回结果。本文用缓存刷新场景说明它与 Lock 的阻塞差异、成功后的 Unlock 责任,以及何时可以跳过一次写入、何时必须排队完成。360 收藏 -
Go 模糊测试默认会让多个 worker 并发调用 fuzz target,固定临时文件名因此可能被覆盖或提前删除。本文用 t.TempDir、os.CreateTemp 和目录注入给出可复现、可清理的修复方式。358 收藏 -
testing/quick.Check 的随机失败要靠可复用的随机源来复现。本文说明如何记录 CheckError.In、Count 和 seed,并保持 Config、Generator 与迭代上限不变,稳定重跑同一组输入。352 收藏 -
Go strings.Reader 的 Read 会推进当前位置,而 ReadAt 按显式字节偏移读取且不会改变后续 Read 的位置。本文用 Len、Size 和短读错误说明两者的边界。351 收藏 -
Go 的 database/sql Conn.Raw 适合短暂访问驱动特有能力,但底层 driver.Conn 只能在回调期间使用。本文用一个连接池场景说明借用、错误传播、归还和并发边界。347 收藏 -
用 io.NewSectionReader 为大文件建立固定偏移和长度的只读视图,再通过 io.Copy、ReadAt 和 Seek 导出或读取指定区间,避免先把整个文件加载进内存。347 收藏