Go问答技术文章
-
Golang · Go问答 | 1天前 | HTTP · 流式处理 · Go问答 · encoding/json · 请求体 · Go DECODE eof 流式解析 json.Decoder JSON请求体
Go 用 json.Decoder 读取 HTTP 请求体时,第二次 Decode 得到 EOF 不一定是异常:它可能代表输入已正常读完,也可能是把单个 JSON 请求误当成了连续流。本文从单对象、尾随空白和多值 JSON 三种边界出发,给出最小判断、严格校验与可复查的读取流程。160 收藏 -
本文用 Go 接口返回 JSON 的现象入手,逐步验证 nil slice 和空 slice 在 len、cap、底层数组、json.Marshal 输出上的区别,并给出 API 响应保持 [] 的初始化方案。157 收藏 -
本文用完整工作流讲解 Go defer 的常见疑问:为什么 defer fmt.Println(i) 打印旧值,defer 注册时参数何时保存,闭包为什么能读到新值,命名返回值如何在 defer 中包装错误,以及多个 defer 为什么按倒序触发。153 收藏 -
Golang · Go问答 | 3星期前 | 依赖注入 · 设计模式 · api设计 · Go问答 · Functional Options · API设计 默认值 依赖注入 Go问答 Functional Options 函数选项
Go 的 Functional Options 能让构造函数同时保留合理默认值和可读的可选配置,但它不适合掩盖必填依赖。本文用一个 HTTP Client 组件说明 Option 的最小写法、默认值与必填项的边界、常见反例和测试清单。153 收藏 -
用 Go 的 embed.FS 把 Markdown 和静态资源打进单个二进制,再通过 net/http 提供本地预览,覆盖目录组织、路径处理、缓存和构建验收。153 收藏 -
Golang · Go问答 | 1个月前 | JSON · 后端开发 · Go问答 · encoding/json · 接口解析 · JSON解析 encoding/json DisallowUnknownFields Go问答 RawMessage json.Decoder UseNumber
Go 解析 JSON 不只看写法短不短。本文围绕字段稳定性、数据量、数字精度、未知字段和延迟解析,比较 struct、map、RawMessage 与 Decoder 的适用场景。151 收藏 -
Go 服务收到 SIGTERM 后,ListenAndServe 已经返回但进程仍迟迟不退出,通常不是 Shutdown 失效,而是活跃连接、长请求、HTTP/2 或 hijack 连接没有走完各自的收尾路径。本文用 ConnState、Shutdown 超时和 RegisterOnShutdown 拆开判断顺序,并给出可回归的优雅退出实现。150 收藏 -
Go 里 errors.Is 返回 false,很多时候不是目标错误不对,而是错误链在中间被格式化字符串截断了。本文从一个可复现的订单查询示例出发,比较 %v、%w 和自定义错误的行为,再给出 errors.Is、errors.As 的检查边界与测试写法。148 收藏 -
Go 1.23 为 for range 增加了函数迭代器。本文从旧版自定义遍历写法迁移到 iter.Seq,说明 yield 返回值、提前停止、iter.Pull 和 go.mod 版本边界,并给出可运行的检查代码。148 收藏 -
Golang · Go问答 | 1个月前 | goroutine · Context · 超时控制 · Go问答 · 协程泄漏 · Go Goroutine 超时控制 context.WithTimeout 取消信号 协程泄漏 ctx.Done
context.WithTimeout 只会在到期后关闭 Done 通道并返回取消原因,不会直接停掉 goroutine。Go 代码要把 ctx 传进阻塞调用,并在 select、循环和清理逻辑里主动响应取消信号。147 收藏 -
Golang · Go问答 | 1天前 | 工具链 · go语言 · Go教程 · 版本升级 · 代码重构 · Go 1.26 go fix modernizer 代码升级 new 表达式 Go 代码迁移
Go 1.26 重写了 go fix,把它从旧式修复命令变成基于 go/analysis 的 modernizer 工具。本文用一个含有可选字段和自定义 newInt 函数的 Go 模块,演示如何预览建议、限定改动范围、检查 go.mod 版本并完成回归。147 收藏 -
Golang · Go问答 | 3星期前 | golang · 消息队列 · 性能优化 · websocket · 高并发 · Go WebSocket广播 Go慢客户端 WebSocket发送队列 Go Hub分片 WebSocket背压
Go WebSocket 广播卡顿,常常不是 CPU 不够,而是一条慢连接把广播路径堵住了。本文从一个房间广播现场出发,说明为什么要给每个客户端独立发送队列、如何确定队列满时的业务策略,以及何时需要按房间分片 Hub,并给出可观测的检查项。146 收藏 -
Go 的 html/template 在链接、CSS 等上下文中会自动过滤不安全数据。页面出现 #ZgotmplZ 往往不是模板坏了,而是 URL 被判定为不可信。本文说明最小复现、协议白名单和不该绕过的安全边界。145 收藏 -
本文回答 Go 里 sync.Once 为什么能保证函数只执行一次、多个协程同时调用时内部做了什么、以及在配置加载、单例初始化和懒加载里怎么安全复用。142 收藏 -
Go 1.21 引入的内置 clear 可以直接清空 map 或切片,但它不会让并发访问变安全,也不会替你决定是否复用底层存储。本文从请求缓存复用场景对比 delete 循环、重新 make 和 clear 的语义、容量与并发边界。137 收藏