Go教程技术文章
-
使用 go-runewidth Condition.Wrap 按终端显示列数折行,说明字节数与 rune 数的区别、逐行测宽、控制字符输入约束及 ANSI 和复杂字符边界。273 收藏 -
Go testing.B.ReportMetric 可以在标准基准结果之外增加自定义吞吐指标。本文从单位名、b.N 除数和 b.Elapsed 时间基准入手,说明 /op、/ns、重复覆盖、内置指标覆盖与 ResetTimer 的使用边界。273 收藏 -
Go crypto/subtle.ConstantTimeCopy 用 0/1 控制是否覆盖等长字节缓冲区。本文说明参数语义、固定长度准备、边界条件,以及它与 copy、ConstantTimeCompare 的区别。273 收藏 -
Go 证书主机名校验失败时优先检查 SAN,不要把 CN 当作现代校验依据;本文区分 DNS SAN、IP SAN、ServerName 与 RootCAs,并给出自定义 CA 的排查和配置方法。272 收藏 -
Go 的 log/slog 可以为同一请求派生一个带 WithGroup 和 With 公共属性的 logger,让 request_id、method、path 等字段自动出现在后续日志中。本文说明派生作用域、TextHandler 与 JSONHandler 的输出差异,以及 WithGroup 和 slog.Group 的选择。272 收藏 -
Go compress/gzip 出错时要分开检查 Write、gzip.Writer.Close、底层 Close 和读取是否到达 io.EOF。本文用写入与读取示例说明流关闭顺序、GZIP 尾部校验和最小错误定位方法。272 收藏 -
Go 的 string 不保证天然是合法 UTF-8。用 unicode/utf8.ValidString 在入库前做字节级拦截,再叠加长度、格式和数据库字符集检查,才能避免坏编码混入数据层。272 收藏 -
Go strings.Cut 返回的空字符串不一定代表分隔符缺失,真正的判断依据是 found。本文用边界输入和可复用代码区分空字段与缺失分隔符。272 收藏 -
围绕 Go sync.WaitGroup 的独立批次复用,说明 Add、Done、Wait 的阶段边界、动态追加风险和不可复制约束。272 收藏 -
用 goquery.Attr 的第二个返回值区分 HTML 属性缺失和属性值为空,再把判断封装进一个可复用的 Go 解析小工具。272 收藏 -
Go sort.Find 可以同时返回有序切片中的命中下标和未命中时的插入位置。本文说明 cmp(i) 的方向、found 的判断、重复值边界与安全插入写法。272 收藏 -
Go log/slog 可以在 Handler 层设置最低日志级别:用 HandlerOptions.Level 固定过滤边界,用 LevelVar 在排障窗口动态调级,再用 Logger.Enabled 避免低级别日志触发昂贵字段计算。本文围绕生产配置、审计边界和发布前复查给出可复用写法。272 收藏 -
bytes.Buffer.Bytes 返回未读数据的共享切片,并非独立快照。本文解释修改、Reset 后复用与异步交付的风险,给出复制再复用的示例,并区分同步借用、长期保存和并发访问的处理方式。272 收藏 -
Go http.NewRequestWithContext 把 context 绑定到出站 HTTP 请求,取消信号会覆盖连接、发送、响应头和响应体读取。本文说明 WithTimeout、错误处理、响应体关闭与测试请求的边界。272 收藏 -
Cobra通过父命令的PersistentFlags向后代共享选项。本文用完整Go示例比较根选项、命令组选项和局部选项,说明目标命令读取、同名遮蔽及TraverseChildren的适用范围。272 收藏