Go教程技术文章
-
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 收藏 -
Go 使用 compress/gzip 写文件时,gzip.Writer.Close 会补齐压缩流并写入 GZIP footer。本文用正确的资源关闭顺序解释 Flush、Close 和底层文件句柄的边界,避免生成无法完整解压的文件。271 收藏 -
Go 的 time.Parse 不能用一个 layout 自动吞掉可选时区。本文按日志形状分流:显式时区用 time.Parse,缺少时区用 time.ParseInLocation,并说明如何统一比较与落库。271 收藏 -
用 embed.FS 把 HTML 模板嵌入 Go 二进制,再通过 html/template.ParseFS 解析并用 ExecuteTemplate 输出页面。本文从路径、glob、模板名称和数据四个边界说明部署自包含与常见排错方法。271 收藏 -
Go 1.24 引入的 crypto/subtle.WithDataIndependentTiming 能在敏感计算期间启用架构相关的独立时序能力,但它不会把变长代码自动变成常量时间。本文用最小示例说明包裹范围、嵌套调用、goroutine 继承和旧版本兼容边界。270 收藏 -
讲清 Go 1.22+ http.ServeMux 的父子树路由、方法匹配、具体性优先、通配符、405 与尾斜杠边界。270 收藏 -
Go 1.25 为 testing.T 增加了 Attr 方法,可以把稳定的测试元数据写进普通测试日志和 go test -json 的 attr 事件。本文用一个订单接口测试拆开 t.Attr 的调用位置、键值边界、JSON 验收方式,以及与 Log 和 Output 的分工。269 收藏 -
用同一个 httptest 服务验证 Go RoundTripper 总耗时与 httptrace.ClientTrace 分阶段耗时的差别,给出按排障目标选工具的边界。269 收藏 -
用 Go text/template/parse 运行同一份示例,检查 ActionNode、Pipeline 节点和语法错误位置,给模板静态检查留下可核对的证据。269 收藏 -
Go build tags 可以通过 _GOOS、_GOARCH 文件名后缀和 //go:build 表达式,在编译期为 Linux、Windows、macOS 选择实现文件,并用 go list 与交叉构建确认结果。268 收藏 -
Go 的 encoding/binary.NativeEndian 适合读取本机格式,但不应直接替代协议字节序。本文用一个二进制记录示例拆开 NativeEndian、unsafe 转换和跨机器可移植编码的边界。267 收藏