Go问答技术文章
-
围绕 Go 文件下载接口的路径穿越风险,解释 filepath.Clean 为什么不等于安全校验,并给出安全根目录、相对路径判断、扩展名白名单、审计日志和验证用例。445 收藏 -
Golang · Go问答 | 1星期前 | time.Parse · 时间处理 · Go问答 · Go基础 · 日期解析 · Go 日期解析 time.Parse YYYY-MM-DD 2006-01-02
Go 的 time.Parse 不认识 YYYY-MM-DD 这类常见日期格式符,它用 2006-01-02 这组参考时刻来描述布局。文章从解析失败的报错入手,给出最小修复、UTC 与业务时区的边界、ParseError 的定位字段和可回归的日期测试,避免日期字段在接口或报表中悄悄偏移。443 收藏 -
Golang · Go问答 | 3星期前 | 并发 · channel · select · 性能排查 · Go问答 · select Go channel context default CPU飙高 忙等循环 ticker
Go select 里的 default 会在没有 channel 就绪时立即返回;如果外层套着无限 for,就会形成忙等循环,让 CPU 空转。更稳的写法是阻塞等待、用 ticker 控制检查频率,并用 context 处理退出。438 收藏 -
Golang · Go问答 | 4天前 | channel · sync.Cond · 架构设计 · 并发编程 · Go问答 · Go channel 条件变量 sync.Cond 并发等待 广播唤醒
Go 的 sync.Cond 和 channel 都能让 goroutine 等待,但它们解决的不是同一个问题。本文从库存闸门和批量任务队列两个场景出发,比较条件变量的广播唤醒、channel 的消息传递、锁边界和关闭语义,并给出可运行的最小写法与选型判断。432 收藏 -
Golang · Go问答 | 2星期前 | 并发 · channel · range · Close · Go问答 · 并发退出 Channel关闭 Go问答 close channel range退出 发送方关闭
Go channel 关闭后仍然可以把缓冲区里的值读完,再继续读取会得到元素类型的零值和 ok=false;但关闭后的 channel 不能再写入,也不能重复关闭。真正安全的关键是让发送方统一负责关闭,并让接收方用 range 或 ok 值退出。427 收藏 -
批量计算文件 SHA-256 时,直接为每个文件启动 goroutine 很容易把磁盘和句柄拖满。本文用一个可取消的小工具演示如何用 context、固定 worker 数和结果汇总,把停止、错误和部分结果处理清楚。419 收藏 -
Golang · Go问答 | 1天前 | 标准库 · bufio · 网络协议 · Go问答 · 流式读取 · peek Go bufio.Reader 协议解析 Go问答 Discard UnreadByte
Go 用 bufio.Reader 解析带长度或分隔符的协议时,Peek 只是查看缓冲内容,不会推进读取位置;Discard 才会消费字节。本文用一个简化帧协议拆开 Peek、Read、Discard、UnreadByte 的数据流转和边界处理。414 收藏 -
用一个小型 Go 日志筛选器说明如何同时支持文件参数和标准输入,处理参数优先级、逐行读取、字段校验、错误退出码以及管道联调。403 收藏 -
Golang · Go问答 | 3天前 | golang · HTTP · Context · 并发编程 · context.Context context.WithTimeout Go HTTP 超时
Go 服务调用 HTTP、数据库或 RPC 时,超时不能只靠客户端等待。本文用 context.WithTimeout 给请求链路加上可传播的截止时间,并说明 cancel、父子 Context、select 和错误判断的常见坑。397 收藏 -
Go 的传统 encoding/json 会把 nil slice 编码为 null,把已初始化的空切片编码为 []。先由接口契约决定返回形状,再在成功响应的边界归一化并用测试锁定,避免前端空列表处理出现分支。392 收藏 -
Go 用 bufio.Scanner 读取日志、CSV 或命令输出时,遇到超长行可能直接停止。本文用最小实验复现 token too long,解释 Buffer、MaxScanTokenSize、SplitFunc 的关系,并给出 Scanner 与 bufio.Reader 的选型边界。391 收藏 -
回答 Go 接口跨域时 OPTIONS 预检请求为什么会返回 404,给出标准库 http 中间件的最小写法、带路由框架时的变体、常见响应头坑点和发布前检查清单。388 收藏 -
Golang · Go问答 | 12小时前 | JSON · 超时控制 · Go问答 · HTTP测试 · 接口验收 · JSON Go 超时 接口测试 httptest.NewServer 烟雾测试
接口能返回 200,不代表客户端真的能用。本文用 Go 标准库 httptest.NewServer 从零写一个小型接口烟雾测试器,逐步检查状态码、Content-Type、JSON 字段和超时,并给出适合 CI 的验收边界。385 收藏 -
Golang · Go问答 | 3星期前 | Timer · 性能优化 · time.After · Go问答 · Go 内存优化 Timer time.After Go问答 time.NewTimer Go1.23
解释 Go time.After 在循环里的资源占用问题,区分 Go 1.23 前后的 Timer 语义变化,并给出 time.After、time.NewTimer、Stop 和 Reset 的工程选择建议。384 收藏 -
Go HTTP 中间件看起来只是函数嵌套,但鉴权、限流、日志和业务处理的顺序会直接影响安全性、指标口径与资源消耗。本文用一条订单接口链路说明中间件的组合方式、顺序取舍和可验证边界。382 收藏