Go语言技术文章
-
Go sync.Cond 的 Signal 不会替等待者保存一条通知。要避免看似错过唤醒,必须用同一把锁保护共享条件和 Wait,并在 for 循环中重新检查条件;再根据唤醒一个还是全部等待者选择 Signal 或 Broadcast。391 收藏 -
Go crypto/subtle.WithDataIndependentTiming 用于在回调期间启用架构相关的数据独立时序能力,但不会把普通变长代码自动变成常量时间。本文用 ConstantTimeCompare 说明正确包法、goroutine 作用域、架构差异和安全边界。391 收藏 -
Golang · Go教程 | 3星期前 | 并发 · Go教程 · trace.NewTask go tool trace Go runtime/trace 执行跟踪 trace.WithRegion
Go runtime/trace 不只是记录运行时事件,还能用 task、region 和 Log 标记一次跨 goroutine 的业务操作。本文从排查现场出发,说明如何把任务上下文传入 goroutine、如何标记区间,以及如何避免结束时机和标记粒度失控。391 收藏 -
用 Go archive/tar 和 filepath.WalkDir 打包目录,讲清 FileInfoHeader 保留文件模式、相对路径、符号链接与关闭顺序。391 收藏 -
Go ServeMux 没有命中请求时,先按方法、主机和路径三层拆开排查。本文用 Go 1.22 的模式语法解释尾斜杠、通配符、{$}、最具体模式优先和 405 结果,并给出可观察实际命中的写法。391 收藏 -
用自建 x509.CertPool 配置 VerifyOptions.Roots,只信任指定根证书;同时区分 Intermediates、DNSName 和 KeyUsages,避免把系统根或中间证书误当成信任边界。391 收藏 -
Go crypto/tls Config.Clone 适合在复用基础 TLS 配置时派生按连接修改的副本。本文说明浅层克隆、证书池和回调的共享边界,并解释会话恢复对验证回调的影响。391 收藏 -
go-i18n 中 MessageID 负责定位消息资源,DefaultMessage 负责资源缺失时的完整回退消息。本文说明两者的优先级、复数模板边界与生产代码选择方法。391 收藏 -
Go 的 url.URL 会同时保留解码后的 Path 与可选的 RawPath 编码提示。本文用具体 URL 说明两者为什么不同,并用 EscapedPath 判断最终输出。391 收藏 -
用 Go 的 os.Pipe 把一个 exec.Cmd 的标准输出接到另一个进程的标准输入,本文给出可复用的最小示例,并说明 Start、Wait、Close 的顺序以及与 StdoutPipe、io.Pipe、Output 的选型区别。391 收藏 -
Go time.Time.MarshalBinary 可以保存时间点、纳秒和时区偏移,但不会保存原始 Location 名称,也不会保留单调时钟读数。本文用原创示例说明二进制往返、错误处理和额外保存 IANA 时区名的边界。391 收藏 -
Go fuzz 发现失败输入后,应保留生成的 testdata/fuzz/FuzzXxx 语料文件并提交到版本库。普通 go test 会自动重放这些种子,-fuzz 只用于继续探索新输入。本文用一个小项目说明目录、命令、CI 分层和敏感数据边界。391 收藏 -
Go 服务做配置热加载时,直接改共享结构体很容易让请求读到半成品。本文用 atomic.Value 发布不可变快照,拆解更新、读取、校验和旧配置回收的边界,并给出可验证的回滚做法。390 收藏 -
slices.Concat 合并结构体切片时只复制结构体元素值,不会递归复制其中的指针、切片或 map 字段。本文用可运行示例区分元素隔离与引用字段共享,帮助判断修改结果后的影响范围。390 收藏 -
Go 的 html/template 会按输出上下文自动转义普通字符串;只有经过明确 allowlist、来源受控的片段,才应在渲染前转换为 template.HTML。本文用一个小页面说明两者的边界、代码写法和验收清单。390 收藏