Go问答技术文章
-
go mod tidy 在本地与 CI 反复修改模块文件时,如何对齐实际工具链与源码输入,识别测试及标签依赖,并区分 go.mod 和 go.sum 的变化原因。133 收藏 -
time.Time 的 Location 不同并不代表时间瞬间不同。本文用 Equal、==、In 和 Round(0) 说明比较、排序与键值场景的选择。133 收藏 -
Go 的 os.CreateTemp 固定按 0600(受 umask 影响前)创建临时文件,因此权限比 0644 严格通常是正常语义。本文按触发信号、实际模式、受控 Chmod、回滚和跨进程排查说明怎样处理。132 收藏 -
Go strings.FieldsSeq 在 Go 1.24 中提供按需遍历空白分隔字段的方式,结果是 iter.Seq[string],不必先创建完整的 []string。本文说明它与 strings.Fields 的边界、提前停止写法和旧版本兼容策略。132 收藏 -
Go benchmark 第一次结果偏慢时,先区分测试框架的首轮校准、被测函数的 lazy init 和环境噪声,再决定是否预热。本文用 b.Loop、StopTimer、ResetTimer 以及 -benchtime、-count 组合,建立可解释的 cold path 与 warm path 测量方式。132 收藏 -
JSON Patch 的 test 是前置条件检查,不是数据库事务。本文说明 test 失败时为什么应丢弃 Apply 结果、保留原文档,并用事务或乐观锁把检查、变更和持久化收口为一次可提交的更新。132 收藏 -
Go defer 属于所在函数,循环结束不会触发延迟关闭。本文以批量文件读取解释资源积累原因,给出单文件助手函数与错误合并写法,并说明作用域、闭包和退出方式的区别。132 收藏 -
Go 自定义 UnmarshalJSON 时,使用不带方法集的类型别名避免递归调用,再通过辅助结构承接原始字段并区分语法、类型、缺失和业务校验错误。132 收藏 -
以go-billy v5.6.2的memfs为例,解释Chroot后绝对路径与子根的关系,通过同一文件的内容比较区分父视图、子视图与宿主路径,并提醒不要重复拼接Root。131 收藏 -
Go 的 csv.Reader 遇到不规范引号时,可以在明确的兼容入口启用 LazyQuotes,但它不是数据清洗开关。本文说明严格模式、ParseError 定位、兼容读取和字段数检查之间的边界。131 收藏 -
Go 使用 crypto/x509.SystemCertPool 读取系统根证书时,Subjects 为空不一定代表没有可用根证书。本文按平台验证 API、磁盘 CA bundle、容器环境和自定义 PEM 的边界,给出稳妥的判断方式。131 收藏 -
Go 配置 CipherSuites 后连接失败,需先区分协议版本与套件范围。本文解释 TLS 1.3 配置限制、TLS 1.2 兼容条件及握手观测方式,并提供保留证书验证的诊断代码。130 收藏 -
Go GC 参数改变后,不能只看一条 gctrace 日志判断接口延迟。本文区分 GOGC、GOMEMLIMIT 与 GODEBUG 的职责,用 GC 摘要、暂停分位数和执行追踪建立同一负载下的对照方法。130 收藏 -
Go database/sql 不能把 SQL NULL 直接扫描到 string。本文说明 NULL、空字符串和默认文本的区别,并比较 sql.NullString、*string 与 COALESCE 的适用边界。130 收藏 -
Go HTTP 服务调用 Server.Shutdown 后仍不退出,多半是活动长请求或 hijack 连接没有收到应用级关闭信号。本文按连接状态给出排查、通知与等待方案。129 收藏