Go语言技术文章
-
用 Go net/url.URL.JoinPath 处理接口基础地址与资源路径的拼接,说明重复斜杠、绝对路径片段、查询参数和转义边界,给出可测试的请求地址写法。248 收藏 -
用一个可复现的流式上传场景说明 Go io.Pipe 的同步阻塞关系、错误回传路径和关闭顺序,避免生成端与上传端互相等待。248 收藏 -
Go 的 log/slog.Attr.Equal 适合做日志属性去重和断言,但组属性、数值类型与空值的比较边界容易被忽略。本文从字段和值的关系出发,给出紧凑写法和检查要点。248 收藏 -
Golang · Go问答 | 1个月前 | 并发 · pprof · 故障排查 · Go问答 · Go goroutine泄漏 net/http/pprof goroutineleak runtime/pprof
Go 1.27 将 goroutineleak profile 作为正式能力,但它不是所有阻塞协程的万能扫描器。本文从 runtime/pprof 的可达性判定出发,拆开检测到的泄漏、全局对象造成的盲区,以及 net/http/pprof 入口的核对方式。248 收藏 -
Golang · Go教程 | 1个月前 | golang · go · 性能 · pprof · 工程实践 · 性能优化 pprof Go PGO profile-guided optimization go build
Go PGO 的收益首先取决于 profile 是否代表真实生产负载,其次要确认构建确实读取了目标 profile。本文从采集、构建和对比三处检查没有加速的原因,并给出可复查的最小流程。248 收藏 -
Go DNS 查询在容器里超时时,不要先把问题归因于业务服务。本文用容器内 resolv.conf、net.Resolver、Resolver.Dial、DNSError 和直连 IP,把配置、DNS 网络、解析响应与业务连接分层排查。248 收藏 -
Go archive/tar 打包目录时,使用 filepath.Rel 计算相对路径,再覆盖 Header.Name 并统一斜杠,就能控制 tar 内部目录层级,同时区分归档路径与解压目标路径。248 收藏 -
Go多用户HTTP客户端不要共享同一个CookieJar。本文从串线症状出发,演示按用户创建独立cookiejar.Jar和http.Client,并说明并发、认证与生命周期边界。248 收藏 -
Go tls.Config 的 KeyLogWriter 能把 TLS 会话密钥写成 NSS key log 格式,方便 Wireshark 解密抓包,但长期启用会扩大密钥泄露面。本文给出受控调试、抓包定位和结束清理的完整做法。248 收藏 -
fs.Sub 只把 io/fs 的逻辑名称映射到子目录,不参与操作系统对符号链接的真实解析,因此不能把 os.DirFS 变成安全沙箱。本文用最小示例解释越界原因,并给出 Go 1.24+ 的 os.Root 做法。248 收藏 -
本文用一个多生产者、多消费者示例说明如何把固定容量的 Go Channel 作为排队上限:缓冲区满时生产者自然阻塞,并通过方向约束、context 取消、WaitGroup 和单点关闭保证生命周期安全。248 收藏 -
Go 1.21 引入的 log/slog 适合结构化日志,但 password、token 和手机号不能直接写入生产日志。本文从一个小型订单服务出发,用 ReplaceAttr 处理嵌套组字段,接入 JSONHandler,并用 bytes.Buffer 验证脱敏结果。247 收藏 -
Go slog.Logger.WithGroup 用组名组织结构化日志字段,但空组名不会创建嵌套层,属性归属还会受到 Handler 处理规则影响。本文用 JSON 输出示例拆解 WithGroup、WithAttrs 和重复组名的边界。247 收藏 -
用 Go 标准库 log/slog 的 LogValuer 隐藏请求凭据,厘清 WithAttrs 预处理与 Value.Resolve 展开的边界,避免把密码和令牌写进结构化日志。247 收藏 -
Go 1.22 改变了循环变量的每轮作用域,但真正的判断点是 go.mod 的语言版本和变量声明方式。本文用闭包示例说明旧模块、新模块及兼容写法。247 收藏