Go语言技术文章
-
Go 1.21 引入的 log/slog 适合结构化日志,但 password、token 和手机号不能直接写入生产日志。本文从一个小型订单服务出发,用 ReplaceAttr 处理嵌套组字段,接入 JSONHandler,并用 bytes.Buffer 验证脱敏结果。247 收藏 -
Go 1.21 引入的 slices.Sort、slices.SortFunc 和 slices.SortStableFunc 写法很像,但比较器语义、等值元素顺序和适用场景并不相同。本文用订单列表排序示例拆开三者的选择边界,并给出可复查的测试写法。397 收藏 -
用 Go html/template 处理用户可控 href 时,单靠 HTML 转义并不够。本文从协议注入风险出发,演示安全 URL 过滤、模板上下文转义与表格驱动回归测试。292 收藏 -
Go database/sql 查询循环结束并不等于读取完整成功,本文从连接中断、Rows.Close 和事务提交三个现场拆开 Rows.Err 的检查边界,并给出可复现的代码与验收方法。102 收藏 -
Golang · Go教程 | 1个月前 | 容器 · go · 性能 · kubernetes · 运行时 · Kubernetes GOMAXPROCS cgroup Go 1.25 容器 CPU 限额
Go 1.25 开始,Linux 容器中的默认 GOMAXPROCS 会参考 cgroup CPU 限额,并在限额变化时自动更新。本文用最小示例说明旧代码的风险、GODEBUG 兼容开关、runtime.SetDefaultGOMAXPROCS 和上线前检查。438 收藏 -
Go 标准库 encoding/csv 默认会用首条记录推断字段数,遇到不齐列或引号不规范的文件就可能在中途报错。本文用导入小工具拆开 FieldsPerRecord、LazyQuotes、ParseError 和逐行处理边界。216 收藏 -
strings.Fields 适合按空白切分普通文本,却不能把带引号的命令参数当成一个整体。本文从文件名带空格的真实输入出发,比较 Fields、简单状态机和标准库参数解析的边界,并用表驱动测试固定转义行为。172 收藏 -
Go 的 context.AfterFunc 适合在上下文取消后触发清理动作,但 Stop 返回 false 时回调可能已经开始或即将开始。本文用超时清理场景说明回调生命周期、竞态窗口、幂等保护和测试验收边界。258 收藏 -
Go 服务写 Cookie 时,HttpOnly、SameSite 和 Secure 不是勾选项,而是分别对应脚本读取、跨站发送和传输加密边界。本文用 net/http 的最小写法说明属性组合、反向代理信任条件和可复查的安全检查。152 收藏 -
Golang · Go问答 | 1个月前 | 标准库 · go · csv · 数据导入 · Go encoding/csv FieldsPerRecord LazyQuotes ParseError
Go 导入 CSV 时,某一行多一个逗号就可能让整个读取流程报 ErrFieldCount。本文解释 FieldsPerRecord 的默认行为,给出允许可变列、保留原始行号和处理 LazyQuotes 的实战写法,避免把坏数据静默吞掉。224 收藏 -
用 Go strings.Cut 解析 key=value 配置行,区分分隔符缺失、空值和多余分隔符,比较 strings.Split 的误判与基准结果,给出可直接落地的解析边界。207 收藏 -
Go 用 json.Decoder 读取 HTTP 请求体时,第二次 Decode 得到 EOF 不一定是异常:它可能代表输入已正常读完,也可能是把单个 JSON 请求误当成了连续流。本文从单对象、尾随空白和多值 JSON 三种边界出发,给出最小判断、严格校验与可复查的读取流程。160 收藏 -
Go 1.25 将 testing/synctest 正式带入标准库,测试超时、定时器和并发协作时不必再真实等待。本文用一个带 deadline 的通知流程说明 synctest.Test、synctest.Wait、时间推进和版本兼容边界。107 收藏 -
Go 的 sync 一次性初始化器适合把稳定结果封装成函数,但初始化失败也会被缓存。本文用配置加载和重试边界说明一次性函数、OnceFunc 与可重试初始化该怎么选。379 收藏 -
Go sync.Pool 适合复用短生命周期、可丢弃的临时对象,但 Put 时机和数据残留很容易写错。本文用 HTTP 响应缓冲区小实验说明 Get、Reset、Put 的边界,再用基准测试验证复用是否真的值得。359 收藏