Go语言技术文章
-
Go 的 json.Decoder.Decode 成功一次不代表整个输入已经结束。本文用第二次 Decode 检查 io.EOF,区分额外 JSON 值与损坏尾部,并给出日志、灰度和回滚做法。212 收藏 -
Go 的 http.Request.GetBody 不是所有请求都会自动生成,只有客户端 NewRequest 识别的标准 reader 才会填充。本文区分客户端与服务端边界,并给出自定义 Body 的安全重放写法。212 收藏 -
Go Scanner 默认只能缓冲有限大小的 token,遇到超长日志会返回 token too long。本文说明如何在 Scan 前正确设置 Scanner.Buffer,以及何时改用 bufio.Reader 分片读取。212 收藏 -
Go interface 存入零值结构体后为什么仍不等于 nil?关键在接口值同时携带动态类型和动态值。本文对比零值结构体、nil 指针和 nil interface,给出类型断言与反射判断的安全边界。212 收藏 -
解释 Go fs.Glob 在 ReadDir 回退和 GlobFS 委托路径中如何处理 I/O 错误,并给出使用 WalkDir 保留底层错误、避免把读取失败误判为无匹配的完整写法。212 收藏 -
Go 1.21 引入的 clear 可以快速清空 map,但它解决的是元素清理,不是所有内存都立刻归还。本文用临时缓存场景拆解 clear、重新 make 和逐项删除的差别,再用基准与运行时指标确认容量复用是否真的适合当前代码。211 收藏 -
Golang · Go问答 | 1个月前 | HTTP · go · 性能排查 · Go net/http 连接泄漏 ConnState StateNew StateActive StateClosed
Go 的 net/http.Server.ConnState 能把连接状态变化暴露出来。本文用 StateNew、StateActive、StateIdle 与 StateClosed 计数,区分正常长连接、慢请求和连接泄漏,并给出可运行的核对方法。211 收藏 -
Go 长循环使用 time.Ticker 时,关键是把退出信号与 ticker.C 放进同一个 select,并在拥有 ticker 的函数退出路径调用 Stop;需要改周期时使用 Reset,同时用完成通知确认 goroutine 已结束。211 收藏 -
使用 Go embed.FS.ReadFile 读取内置资源时,不要只比较错误字符串。本文从 io/fs 的路径规则出发,演示如何用 errors.Is 判断资源不存在,再用 errors.As 读取 PathError 的操作名、路径和底层原因。211 收藏 -
Go 的 gzip.Writer 会把 Header.ModTime 写进 gzip 头部 MTIME。固定 UTC 秒级时间,并在 Write、Flush 或 Close 之前设置,才能避免归档因当前时间变化而产生不稳定字节。211 收藏 -
Go pprof 的 alloc_space 看累计分配,inuse_space 看最近一次 GC 后仍存活的内存。同一调用栈排名相反并不矛盾,关键是先确认对象生命周期,再用两个视图交叉判断。211 收藏 -
Go 的 cookiejar.Options 可通过 PublicSuffixList 限制 Cookie 的域作用范围。本文讲清 publicsuffix.List 接入方式、nil 配置风险、自定义接口约束与公网客户端实践。211 收藏 -
处理 multipart/form-data 时,不必把上传文件全部读入内存。本文用 NextPart 与 NextRawPart 展示如何按字段读取、跳过文件内容,并说明文件名解码和边界错误的判断方法。210 收藏 -
解释 Go regexp.MustCompile 与 regexp.Compile 在配置加载中的边界:哪些规则适合启动即失败,哪些输入必须保留运行时错误,并给出可验证的代码写法。210 收藏 -
用 testing.F 和 f.Add 写 Go fuzz 测试时,随机字节并不会自动符合业务格式。本文演示如何保留长度与位置变化,把输入映射到合法字符域,并拆分非法输入测试。210 收藏