Go语言技术文章
-
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 收藏 -
Golang · Go问答 | 2个月前 | 性能优化 · Context · go并发 · 故障排查 · Go goroutine泄漏 context.WithCancel 请求生命周期 defer cancel
调用 context.WithCancel 并不自动消除 goroutine 泄漏。关键在于 cancel 的调用位置、子协程是否监听 Done,以及请求提前返回时能否及时结束。本文从一个持续增长的接口现场拆出根因、修复和复查方法。427 收藏 -
Go 的 os.File.Chmod 在 Unix 上修改权限位,在 Windows 上主要控制只读属性。本文用可运行示例说明 0o200、0o400、0o600 的平台差异、符号链接行为和跨平台验证方式。427 收藏 -
讲清 Go io.ReadFull 读取固定二进制头部时的缓冲区安排:先读定长头,再校验长度并分配载荷,区分 EOF 与 ErrUnexpectedEOF。427 收藏 -
Go select 没有 default 并不是异常:当所有通信 case 都暂时不可执行时,当前 goroutine 会等待;本文区分缓冲、关闭和 nil channel,并给出 default、超时与取消的选择方法。427 收藏 -
Go 用 json.Decoder 解码到 interface{} 时,JSON 数字默认会变成 float64。本文演示 UseNumber 如何保留数字字面量,再按需调用 Int64 或 String,避免大整数被浮点转换。427 收藏 -
Go 的 html/template 和 text/template 接口相近,但安全边界完全不同。本文从普通字符串、HTML 上下文、纯文本输出和 template.HTML 安全类型四个角度说明选择方法,并给出迁移与测试检查清单。427 收藏 -
Go 读取证书时,pem.Decode 返回 nil 与 x509.ParseCertificate 返回错误不是一回事。本文用分层代码、错误阶段和边界表定位 PEM 外层格式与 DER/X.509 内容问题。427 收藏 -
Go fs.Glob 的设计就是忽略目录读取时的 I/O 错误,默认只把非法匹配模式作为返回错误。本文拆解 GlobFS 与 ReadDir 分支,并给出用 WalkDir 保留目录错误的处理方案。427 收藏 -
Go time.Duration.Abs 遇到 math.MinInt64 时会返回 math.MaxInt64。本文解释 int64 纳秒范围、唯一不对称边界,以及超时和重试场景下的业务上限检查方法。427 收藏 -
Go crypto/tls 中,MinVersion 和 MaxVersion 控制协议版本,CipherSuites 只影响 TLS 1.0–1.2。本文给出兼顾 TLS 1.2、TLS 1.3 与旧客户端的配置方法、选型表和排错边界。427 收藏