Go语言技术文章
-
Go 服务把 regexp.Compile 放进请求函数后,正则本身没变,延迟却会随并发上升。本文用基准对比请求内编译、包级预编译和受控缓存,解释编译成本、并发读写与动态规则的边界。479 收藏 -
Go 扫描上传目录或日志目录时,os.ReadDir、File.Readdir 和 filepath.WalkDir 的内存与排序行为并不一样。本文用一个目录索引小实验说明如何按需读取 DirEntry、避免无意排序,并在权限错误和部分结果场景下保留可用数据。478 收藏 -
在 Go 的 text/template 模板里,条件语句(比如 {{if}})两侧通常会把原本的换行符一并保留下来,所以渲染结果里很容易莫名多出几行空白;想把这类空白控制住,就得用 {{-(左去空白)和 -}}(右去空白)这套语法,按位置精确裁掉多余字符,让最终输出更紧凑,也不会夹带冗余换行。 在477 收藏 -
Go 1.26 放宽了 new 的参数限制,可以直接用 new(expr) 创建带初始值的指针。本文用可选字段、版本门槛和迁移验证说明它解决什么问题,以及什么时候不该急着改写。476 收藏 -
Go语言要求import语句严格位于package声明之后、所有变量、函数等顶层声明之前,这是由Go源文件语法规范强制规定的,违反顺序将导致编译错误。 Go语言要求import语句严格位于package声明之后、所有变量、函数等顶层声明之前,这是由Go源文件语法规范强制规定的,违反顺序将导致编译错误475 收藏 -
Go 1.23 引入的 unique 包可以把重复值映射到可比较的 Handle,但它不是无上限缓存。本文用字符串标签场景说明 unique.Make 的比较方式、Handle 生命周期和不适合使用的业务边界。471 收藏 -
Go 1.23 的 slices.Collect 能把迭代器收集成切片,但它不是零成本转换。本文从惰性生成、空序列、容量增长和大结果集几个边界入手,配合可运行代码说明什么时候适合收集,以及如何避免一次性占满内存。470 收藏 -
Go 里用 CmdContext 设置超时后,父命令返回并不等于整棵子进程树已经退出。本文用可复查的命令场景解释 context 取消、Wait 返回、子进程残留和回收验证之间的边界,给出带退出状态检查的处理方式。470 收藏 -
Golang · Go问答 | 4星期前 | go · 性能 · kubernetes · 运行时 · 容器化 · Kubernetes GOMAXPROCS Go问答 Go 1.25 SetDefaultGOMAXPROCS 容器CPU配额
同一份 Go 服务部署到 Kubernetes 后,节点有 16 个核,Pod 却只限 2 个核,手动设置的 GOMAXPROCS 还可能在扩缩容后失真。Go 1.25 已让运行时默认读取容器 CPU 配额,本文用一个可复现的小程序说明如何检查旧配置、恢复运行时默认值,并给出上线前的边界清单。467 收藏 -
time.Ticker.Stop 只负责停止后续计时,不承诺把已经进入通道的值清空。本文从定时刷新任务的退出现场出发,拆解停止语义、旧值竞态、goroutine 泄漏与可验证的退出写法。467 收藏 -
Go 泛型函数直接调用时通常可以省略类型参数,但一旦作为回调赋值、传参或返回值,类型推断依赖目标函数签名。本文用最小代码说明推断成功与失败的边界,并给出稳妥的显式实例化写法。466 收藏 -
Golang · Go问答 | 4星期前 | 微服务 · Context · go并发 · 错误诊断 · 请求取消 · Go 错误处理 context.WithCancelCause context.Cause 取消原因 ctx.Err
服务日志里只出现 context canceled 时,ctx.Err() 只能告诉你流程停了,却说不清是用户取消、上游超时还是业务主动终止。本文用 Go 1.20 引入的 context.WithCancelCause 和 context.Cause 改造一个批量查询场景,说明旧代码影响、兼容边界、错误分类与最小验证方法。465 收藏 -
Golang · Go问答 | 4星期前 | 超时 · Context · 并发控制 · Go问答 · 请求生命周期 · Go 后台任务 Deadline 请求取消 context.Cause context.WithoutCancel
context.WithoutCancel 可以让派生上下文忽略上游取消,但它会同时失去 Deadline、Err 和 Done。本文用 HTTP 请求收尾场景对比 WithoutCancel、WithTimeout 和 WithCancelCause,给出可验证的后台任务边界和回归指标。465 收藏 -
Golang · Go教程 | 2天前 | 内存 · 标准库 · go · 性能 · bytes.Buffer · go bytes.Buffer Buffer.Available Buffer.Grow ErrTooLarge
Go bytes.Buffer 的 Available 能告诉你当前还能直接写入多少字节,但它不是总容量,也不能替代 Grow 的容量规划。本文用批量拼接 HTTP 响应的场景,说明 Available、AvailableBuffer、Append、Grow 与 ErrTooLarge 的边界,并给出可回归的检查方法。465 收藏 -
Go 服务启动时监听端口失败,先区分地址已占用、地址族不匹配和权限问题,再用 ss、lsof 及最小化 Go 复现确认根因。462 收藏