Go语言技术文章
-
Go fmt.Formatter 要通过 Format 方法把内容写入 fmt.State;只实现方法签名还不够。本文用自定义指标类型说明动词分派、宽度精度、值与指针接收者、别名类型防递归,以及输出为空或不符合预期时的排查顺序。103 收藏 -
Go 的 constant.Real 和 Imag 分别读取复数 Value 的实部与虚部,返回结果仍是 constant.Value。本文说明 MakeImag 与 BinaryOp 的组装方式、Unknown 传播,以及 Float64Val 转换时如何判断精度损失。103 收藏 -
Go 读取 GIF 动画时应使用 image/gif.DecodeAll,遍历返回的 Image 与 Delay 数组;Delay 的单位是百分之一秒,LoopCount 还要单独解释。本文给出尺寸预读、文件复位、延迟换算和内存边界。103 收藏 -
Golang · Go问答 | 4星期前 | JSON · 基准测试 · go · pprof · 性能排查 · 内存分配 encoding/json pprof Go JSON JSON性能 go test benchmark
Go JSON 编解码慢时,不要只看 ns/op。本文用固定输入、benchmem、CPU profile 和内存 profile,区分 JSON 计算热点、短命对象分配与存活堆增长,再按证据选择优化动作。102 收藏 -
encoding/xml 默认按 UTF-8 解析 XML。本文用 CharsetReader 按声明分派 GBK、Windows-1252 和 Shift_JIS 转换器,把输入接成 UTF-8 Reader,并区分未知字符集、转换失败、XML 语法错误和业务校验错误。102 收藏 -
Go http.Server.SetKeepAlivesEnabled(false) 控制的是服务端 HTTP keep-alive,不是 TCP keep-alive,也不能替代 Shutdown。本文说明临时排空、Server 生命周期、优雅停机和常见未生效原因。102 收藏 -
Go inspector.WithStack 会把当前 AST 遍历路径以 []ast.Node 传入回调,本文用一个完整示例说明 stack 的顺序、push/pop 语义、剪枝方式,以及为什么保存祖先链时要复制切片。102 收藏 -
用 Go Doublestar 的 WithNoFollow 控制递归匹配遇到目录符号链接时的遍历边界,并说明固定路径前缀、WithFilesOnly 与 WithFailOnIOErrors 的组合注意事项。102 收藏 -
Go sync.Mutex 不支持同一 goroutine 的重入。本文从调用栈定位嵌套 Lock,明确解锁责任,并用带锁入口与无锁核心函数拆分临界区。102 收藏 -
围绕 Go 1.23 引入的 iter.Pull,说明 next 返回值与 ok 标志如何判断空序列和自然结束,并用 defer stop 覆盖提前退出、限量读取与找到目标值等边界场景。102 收藏 -
io.CopyBuffer 只有在实际需要缓冲的复制路径中才会使用传入的 []byte。本文说明 nil、零长度、WriterTo/ReaderFrom 快速路径为何会改变结果,并给出串行批处理复用缓冲区、定位分配来源和处理并发边界的写法。102 收藏 -
Go 的 url.QueryUnescape 会把查询字符串中的加号解码为空格,这是查询组件的既定语义。本文说明 %2B、QueryEscape、PathUnescape 与 ParseQuery 的边界,帮助你正确保留字面量加号并处理解码错误。102 收藏 -
Go 反射修改字段没有生效,通常是反射值不可设置、字段未导出或赋值类型不匹配。本文用 ValueOf、Elem、CanSet 和字段类型检查说明安全更新路径。101 收藏 -
Go log/slog 的 Handler.WithAttrs 用来为新 Handler 保留公共属性。本文从 Logger.With 的调用关系讲起,说明如何附加请求字段、为什么原 Handler 不会被修改,以及自定义 Handler 如何处理属性切片、分组和 LogValuer。101 收藏 -
Go image/draw 的偏移绘制关键在目标矩形 r.Min 与源点 sp 的对齐。本文用最小示例说明 image.Rect、源图像边界、越界裁剪以及 draw.Src 和 draw.Over 的选择。101 收藏