Go语言技术文章
-
bufio.Scanner 默认 token 容量有限,读取超长单行时可能出现 token too long。本文说明如何在 Scan 前设置 Buffer,如何判断字节容量边界,以及什么时候改用 bufio.Reader。159 收藏 -
Go embed 的“文件不存在”分成构建期匹配失败和运行期路径缺失两类。本文用 embed.FS 说明如何判断 fs.ErrNotExist,并设计不会因可选资源缺失而无法构建的目录结构。158 收藏 -
Go slog 通过 With 创建请求专属日志器并显式传递,区分请求属性与事件属性,排查字段丢失、请求串号及 Context 自动取值误区。158 收藏 -
用 expvar.Func 和自定义 Handler 暴露只读运行指标,说明 GET 访问边界、动态计算、路由隔离、命名冲突与数据安全。158 收藏 -
Go json.Unmarshal 遇到 JSON null 时会按目标类型处理:指针字段被设为 nil,普通 string 等非指针字段通常保持原值。本文用结构体示例拆开指针、普通字段和字段缺省的边界,帮助排查接口入参中的 nil 现象。158 收藏 -
Go HTTP Server 流式下载应优先监听 r.Context().Done(),并把取消信号传给上游数据源;ResponseWriter.Write 错误作为补充信号,及时停止读取并释放资源。158 收藏 -
Go tls.Config 通过 NextProtos 发布 ALPN 候选,协议选择发生在 TLS 握手期间。本文用最小客户端和服务端示例说明如何配置 h2 与 http/1.1、读取 NegotiatedProtocol,并定位没有交集时的常见问题。158 收藏 -
Go testing.B.Cleanup 适合绑定基准测试生命周期中的资源释放:先创建资源并注册 Cleanup,再用 ResetTimer 划定计时区间;本文用临时目录和自定义资源示例说明清理时机、LIFO 顺序,以及它与 b.TempDir 的选择边界。158 收藏 -
Golang · Go问答 | 2天前 | 结构体 · Go问答 · Go 结构体标签 go/ast go/types reflect.StructTag types.Struct Struct.Tag
Go types.Struct.Tag 返回的是字段标签字符串,空字符串既可能来自未设置标签,也可能来自空原始标签。本文对比 AST 的 Field.Tag、go/types.Struct.Tag 和 reflect.StructTag.Lookup,说明三种层次分别能保留什么信息。158 收藏 -
介绍 Go parser.ParseExpr 解析单个表达式的用法,并说明为什么需要 ParseExprFrom 配合 token.FileSet 才能稳定输出文件名、行号、列号和多条语法错误。158 收藏 -
Go 的 json.Encoder 默认会转义 JSON 字符串中的 HTML 相关字符。本文通过对比示例说明 SetEscapeHTML(false) 的使用边界,以及 API、日志和 HTML 嵌入场景如何选择。158 收藏 -
Go HTTP客户端分层超时需要区分网络环节上限、请求业务预算与客户端总超时。本文通过原创小响应示例说明配置方法、正文读取和资源关闭,并解释超时并存与常见误用。157 收藏 -
Go 里常说的 DNSResolver 实际通常指 net.Resolver。若自定义 Dial 始终连首选 DNS,查询超时后不会自动切换到备用服务器;本文拆开 Dial、context 和查询级主备策略,用两个 Resolver 与独立超时预算实现可审查的 DNS 故障切换,并说明缓存、并发和系统解析器的边界。157 收藏 -
Go HTTP 服务优雅关闭的关键是先停止接收新连接,再等待活跃请求回到空闲;本文用 signal.NotifyContext、Server.Shutdown 和超时兜底组成可直接复用的关闭流程,并说明 WebSocket 等长连接的额外边界。157 收藏 -
Go 中不要直接比较 IP 字符串:先用 netip.ParseAddr 转成 Addr,再按任务选择 ==、Compare 或 Less;本文还说明 IPv4-mapped IPv6、IPv6 zone、零值、map key 与输入校验边界。157 收藏