Go语言技术文章
-
围绕 Go database/sql 连接池设置 MaxOpenConns、MaxIdleConns 与生命周期参数,并用 DBStats 的等待增量判断容量不足、连接占用和归还路径问题。428 收藏 -
Golang · Go问答 | 2星期前 | 标准库 · 数据校验 · 压缩 · Go问答 · Go compress/gzip io.ReadAll ErrChecksum gzip.Reader CRC-32
Go gzip.Reader 读取内容看似正常,却在末尾返回 ErrChecksum,通常不是解压过程突然失败,而是 Reader 读到 gzip 尾部后发现 CRC-32 或未压缩长度不一致。本文说明完整读取到 EOF 的正确处理方式,并区分截断、错误格式、写入端未 Close 和多成员流等常见原因。428 收藏 -
Go unicode.SimpleFold 每次返回 Unicode simple case folding 等价链中的下一个 rune。本文用可终止的回环遍历收集等价字符,并比较它与 ToLower、ToUpper 及 UTF-8 校验的适用边界。428 收藏 -
解释 Go Gock 的 Persist 为什么会影响后续测试,区分默认 mock、Times 次数限制与持久 mock,并给出 Off 和 RestoreClient 的测试隔离写法。428 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · 错误处理 · 文件读取 · Go问答 · 排错 · Go bufio.Scanner errors.Is errors.As ErrTooLong Scanner.Err 文本读取
bufio.Scanner 的 Scan 返回 false 不一定代表读取失败,io.EOF 会被 Err 隐藏为 nil。本文按 Reader、SplitFunc 和缓冲区三类来源拆分错误,并用 errors.Is、errors.As 识别哨兵错误、PathError 与 ErrTooLong。428 收藏 -
ScanComments 负责识别注释,SkipComments 决定识别后是否跳过。本文用一个小型 text/scanner 工具说明两者组合,并区分 go/scanner 的 API 边界。428 收藏 -
Go log/slog.Logger 记录错误时要给 error 一个稳定的属性名,并补充操作和资源上下文。本文说明 !BADKEY 的原因、TextHandler 与 JSONHandler 的呈现边界,以及用 LogValuer 输出结构化错误字段的方法。428 收藏 -
Go HTTP 客户端重试 POST 时,超时只说明客户端没有拿到结果,并不能证明服务端没有处理。本文从请求体、方法语义、幂等键和响应体关闭四个方面,给出一套可控的重试写法。427 收藏 -
Go runtime.KeepAlive 的关键不是延长所有对象的生命周期,而是在系统调用返回前保持带有 finalizer 的外部资源对象可达。本文用文件描述符和底层调用示例说明放置位置、适用边界与排查清单。427 收藏 -
Go TLS 客户端连接自签名服务失败时,通常不是把校验关闭,而是正确构造 RootCAs。本文说明如何保留系统根池、追加自签名 CA,并区分信任链与主机名错误。427 收藏 -
Go append 是否共享数组取决于追加后长度与原容量。通过固定容量示例定位覆盖位置,区分限制容量与复制元素存储,并明确切片接口的共享和修改约定。427 收藏 -
Go channel 缓冲区只能吸收暂时的速率差,不能提升消费者吞吐量。本文从到达速率、消费速率、发送阻塞和队列积压出发,说明如何选择一个小而有界的容量,并给出观察代码与决策表。427 收藏 -
Go 中声明但没有 make 的 channel 值是 nil,发送、接收和 range 都不会找到通信对象,因此会永久阻塞。本文对比 nil channel、空缓冲 channel 和已关闭 channel,给出初始化、nil 防护以及 context 超时的实用写法。427 收藏 -
Go json.Decoder.Token 会按顺序读取 JSON 流中的分隔符、键和值,并在自然结束时返回 io.EOF。本文说明返回类型、嵌套层级、Token 与 Decode 的配合方式,以及截断输入和非法结构的处理边界。427 收藏 -
Go regexp.Regexp.String 返回编译时使用的正则表达式文本,适合做配置回显和诊断日志。本文对比 String、MatchString、FindString 与 MarshalText 的职责,并说明空指针、动态规则和敏感日志的使用边界。427 收藏