Go问答技术文章
-
用 Go 的 embed.FS 把 Markdown 和静态资源打进单个二进制,再通过 net/http 提供本地预览,覆盖目录组织、路径处理、缓存和构建验收。153 收藏 -
Go 1.21 引入的内置 clear 可以直接清空 map 或切片,但它不会让并发访问变安全,也不会替你决定是否复用底层存储。本文从请求缓存复用场景对比 delete 循环、重新 make 和 clear 的语义、容量与并发边界。137 收藏 -
Golang · Go问答 | 3小时前 | golang · 并发编程 · bytes.Buffer · 内存管理 · Go问答 · bytes reset bytes.Buffer Go内存 切片别名
Go 里把 bytes.Buffer.Bytes() 返回的切片保存下来,再复用 Buffer 写下一条消息,旧数据为什么会跟着变化?关键在于 Bytes 返回的是底层数组视图,不是独立副本。本文用消息编码场景说明 Reset、切片别名、Clone 拷贝和并发边界,给出可复查的安全写法。470 收藏 -
Golang · Go问答 | 3小时前 | go · 文件上传 · 安全 · net/http · 接口设计 · multipart/form-data ParseMultipartForm http.MaxBytesReader Go文件上传 请求体大小限制
Go 文件上传接口不能只依赖 ParseMultipartForm 的参数,否则超大请求仍可能先进入内存或临时文件。本文从 net/http 服务端入口开始,演示 MaxBytesReader、ParseMultipartForm 和文件级校验的组合边界,并给出超限回归检查。275 收藏 -
Golang · Go问答 | 3小时前 | go · 性能 · bufio · 日志处理 · 错误排查 · 分块读取 Go bufio.Scanner token too long Scanner.Buffer 大日志行
Go 用 bufio.Scanner 逐行读取日志时,遇到超长 JSON 行会返回 token too long。本文用可复现实验比较默认上限、Scanner.Buffer 和 bufio.Reader 分块读取的内存与吞吐边界,给出线上日志处理的选择方法。501 收藏 -
Go HTTP 中间件看起来只是函数嵌套,但鉴权、限流、日志和业务处理的顺序会直接影响安全性、指标口径与资源消耗。本文用一条订单接口链路说明中间件的组合方式、顺序取舍和可验证边界。382 收藏 -
Go 1.23 为 for range 增加了函数迭代器。本文从旧版自定义遍历写法迁移到 iter.Seq,说明 yield 返回值、提前停止、iter.Pull 和 go.mod 版本边界,并给出可运行的检查代码。148 收藏 -
Go 的 PATCH 接口如果直接把请求体解码到普通结构体,字段缺失和显式 null 很容易被合并。本文用指针与 json.RawMessage 设计可验证的更新参数,说明两种方案的取舍、错误处理和兼容边界。226 收藏 -
用 sync.Pool 复用 bytes.Buffer 可以减少短生命周期对象的分配,但必须处理 Reset、取出类型和跨请求数据污染问题。本文从一次响应体串数据的故障现场出发,给出可验证的实现、边界和复查方式。173 收藏 -
Go 里 errors.Is 返回 false,很多时候不是目标错误不对,而是错误链在中间被格式化字符串截断了。本文从一个可复现的订单查询示例出发,比较 %v、%w 和自定义错误的行为,再给出 errors.Is、errors.As 的检查边界与测试写法。148 收藏 -
Go 服务接收 JSON 时,json.Decoder 和 json.Unmarshal 的区别不只在写法。本文用连续 JSON 请求的真实场景,说明如何选择解析方式、如何检查请求体边界,以及怎样避免多读数据或漏掉尾部内容。446 收藏 -
Golang · Go问答 | 1天前 | golang · HTTP · Context · 并发编程 · context.Context context.WithTimeout Go HTTP 超时
Go 服务调用 HTTP、数据库或 RPC 时,超时不能只靠客户端等待。本文用 context.WithTimeout 给请求链路加上可传播的截止时间,并说明 cancel、父子 Context、select 和错误判断的常见坑。397 收藏 -
Golang · Go问答 | 1天前 | golang · 超时 · HTTP · Go问答 · Transport · 网络排查 · 连接超时 http.Transport Client.Timeout Go HTTP 客户端超时 TLS握手超时
Go 的 http.Client 超时太粗时,DNS、建立连接、TLS 握手和响应读取会混在同一个等待里。本文用一段可复现的慢请求场景拆开 Transport 参数,给出基线指标、改动方案和复测边界。112 收藏 -
用一个小型 Go 日志筛选器说明如何同时支持文件参数和标准输入,处理参数优先级、逐行读取、字段校验、错误退出码以及管道联调。403 收藏 -
Golang · Go问答 | 2天前 | channel · sync.Cond · 架构设计 · 并发编程 · Go问答 · Go channel 条件变量 sync.Cond 并发等待 广播唤醒
Go 的 sync.Cond 和 channel 都能让 goroutine 等待,但它们解决的不是同一个问题。本文从库存闸门和批量任务队列两个场景出发,比较条件变量的广播唤醒、channel 的消息传递、锁边界和关闭语义,并给出可运行的最小写法与选型判断。432 收藏