Go语言技术文章
-
Go 的 url.PathUnescape 遇到尾部百分号或非十六进制编码时会返回错误。本文用最小代码说明如何判断输入、区分路径和查询解码,并在进入业务逻辑前安全处理坏路径。426 收藏 -
Go HTTP 服务端重复读取 Body 得到空内容,通常是中间件已消费原流。通过小服务说明入口限量缓存、重建读取器、错误处理与关闭边界,并区分 GetBody 和已解析对象复用。232 收藏 -
Go ServeMux 出现路由冲突时,先沿注册阶段的 panic 栈找到两个 pattern,再比较方法、主机和路径的具体程度;交换注册顺序不能解决同等具体的冲突。149 收藏 -
区分 time.Time 零值与 Unix epoch 的语义,说明 IsZero、Unix、可选时间字段和数据库时间字段应该分别怎样判断。278 收藏 -
从 context 没有传递、HTTP 请求未绑定 context 和自定义等待未监听 Done 三个角度,说明 Go 超时后下游仍在执行的原因与修正方式。490 收藏 -
Go goroutine 退出不会自动关闭 channel。本文区分发送阻塞、接收等待与取消确认,用固定工作者和单一关闭者说明提前停止消费的处理方式。234 收藏 -
Go defer 写在循环里时,文件通常不会在每轮结束后马上关闭。本文解释 defer 的函数级生命周期,并对比局部函数封装与显式 Close 两种修正方式。289 收藏 -
Golang · Go问答 | 1星期前 | 接口 · 标准库 · IO · 性能 · Go问答 · Go Writer 字符串写入 WriteString io.StringWriter io.WriteString
Go 的 io.StringWriter 用一个 WriteString 方法描述字符串写入能力。本文说明 io.WriteString 的优先分发规则、如何为自定义 Writer 增加 WriteString,以及迁移时的返回值、错误和兼容边界。421 收藏 -
Golang · Go问答 | 1星期前 | 切片 · 标准库 · 性能 · 编码 · Go问答 · Go 文本格式化 encoding.TextAppender AppendText TextMarshaler 低分配
Go 1.24 新增的 encoding.TextAppender 允许类型把文本直接追加到调用方已有的 []byte。本文用一个自定义类型说明 AppendText 的实现、缓冲区边界、错误返回,以及怎样与 TextMarshaler 保持兼容。342 收藏 -
Go 1.23 及以上使用 slices.Collect 收集空 iter.Seq 时会得到 nil 切片。本文区分 nil 与非 nil 空切片、interface 包装和 JSON 输出,并给出稳定返回 [] 的处理方式。384 收藏 -
Golang · Go教程 | 1星期前 | goroutine · pprof · Go教程 · 运行时 · Go pprof 性能诊断 goroutine profile pprof.Lookup
Go 里可以通过 pprof.Lookup("goroutine") 获取运行时内置的 goroutine profile,再用 WriteTo 将它写入 bytes.Buffer 或文件。本文说明 debug=1 文本、debug=0 协议缓冲区和 debug=2 堆栈格式的区别,并给出错误处理与复用封装。465 收藏 -
Go 的 http.Cookie.Valid 会在写出 Cookie 前检查名称、值、过期时间、路径、域名以及 Partitioned 与 Secure 的组合约束。本文用可执行示例说明如何读取具体错误、避免 String 的静默降级,并划清 Valid 与浏览器策略的边界。166 收藏 -
Go 的 textproto.CanonicalMIMEHeaderKey 会把合法 MIME 请求头键名转换成首字母和连字符后字母大写、其余字母小写的形式;本文说明空格和非法字段字节为何原样返回,以及 MIMEHeader 读写与直接 map 访问的边界。283 收藏 -
使用 image.NewRGBA 创建可修改图像时,先用 image.Rect 明确坐标范围,再通过 SetRGBA 写入像素;需要批量处理时理解 PixOffset 与 Stride,遇到非零原点和 SubImage 也不容易越界。289 收藏 -
Go gzip.Reader 用 Reset 串行复用,但 Close 不会关闭底层文件,也不能代替读到 EOF;示例区分超限拒绝、尾部校验与逐文件清理。454 收藏