Go语言技术文章
-
Golang · Go教程 | 2星期前 | 性能分析 · Go教程 · 并发调试 · runtime/trace · Go goroutine阻塞 runtime/trace trace.NewTask trace.Logf
当 goroutine 偶发卡住时,runtime/trace 能把任务、日志和调度时间线放到同一份证据里。本文用 trace.NewTask、trace.Logf 和 trace.Start/Stop 建立最小采集程序,再说明如何从任务延迟和阻塞区间定位问题。474 收藏 -
Go 1.27 引入泛型方法后,方法可以声明自己的类型参数,但接口方法仍不能声明类型参数。本文用 Rand.N、函数类型推断和接口边界说明如何判断代码能否编译,以及如何保留兼容性。474 收藏 -
Go 1.27 的 go doc 可以直接查询 package@version。本文讲清它与当前工作区文档的差别、版本查询边界、私有模块配置和升级前核对方法。474 收藏 -
Go 使用 filepath.Ext 判断文件扩展名时,只会返回最终路径元素最后一个点开始的后缀。本文结合隐藏文件、多重后缀和大小写,给出可复用的判断规则。474 收藏 -
Go 的 encoding/json 默认会把 JSON 字符串中的小于号写成 \u003c,这通常是 HTML 安全转义而不是乱码。本文说明如何判断、何时使用 SetEscapeHTML(false),以及关闭后仍需遵守的 HTML 安全边界。474 收藏 -
Go 的 string 下标访问的是 UTF-8 字节而不是字符。本文用 Go你 示例说明 len、s[i]、range、[]rune 和 unicode/utf8 的边界,避免中文截断和错误计数。474 收藏 -
Go 读取超过内置范围的大整数时,应按输入形态选择 math/big 的 SetString、fmt.Sscan、JSON 解码或 SetBytes,并在 String、Text、Bytes 和 int64 转换之间处理进制、符号与范围边界。474 收藏 -
接口定义已经改了,生成的 Go 文件却忘了提交,是多人协作里很隐蔽的一类问题。本文从生成入口、差异检查、提交前核对和 CI 门禁四个环节,搭建一套让 Protobuf 代码漂移无处藏身的 Go 项目工作流。473 收藏 -
Go slog.Logger.With 会返回带属性的新 Logger,不会改写原 Logger。本文用并发请求和测试场景说明共享字段污染的成因、检查方法、隔离写法与验收边界。473 收藏 -
解释 encoding/csv.Reader.ReuseRecord 的切片复用语义,演示批量读取时如何降低分配,以及需要长期保存记录时如何避免数据被下一次 Read 覆盖。473 收藏 -
SetMemoryLimit 和 GOMEMLIMIT 都是在约束 Go 运行时内存预算,但它们不是硬性进程上限。本文用一个可复测的小程序说明 GC 频率、HeapReleased 与外部内存的边界,并给出压测和容器部署中的核对方法。473 收藏 -
解释 Go modernize/newexpr 为何暂不把显式 uint32、int64 泛型辅助函数改成 new(expr),并给出默认类型、显式转换与批量审查边界。473 收藏 -
context.Err 和 context.Cause 不是同一个答案。本文用父子 Context、首个取消者和原因转发三个边界,说明为什么只能得到 context.Canceled,以及日志该如何记录。473 收藏 -
用 Go 泛型和 comparable 约束写一个保持顺序的切片去重函数,覆盖 int、string、自定义结构体及不可比较元素的处理边界。473 收藏 -
go test -race 变慢通常是正常的检测成本。本文教你固定比较口径,拆分编译、执行、内存和覆盖率影响,并判断哪些测试值得长期运行 race。473 收藏