Go语言技术文章
-
Go 1.26 为 runtime/pprof 增加了实验性的 goroutineleak profile,可以帮助发现因 channel、锁等并发原语永久阻塞的协程。本文用一个提前返回的收集器复现泄漏,说明启用开关、采样方式、误判边界和回滚检查。257 收藏 -
Go 1.21 带来的 log/slog 不只是把日志改成 JSON。本文从一次请求日志难以检索的场景出发,解释结构化字段、Handler、级别过滤和高频日志的取舍,并给出一套可渐进迁移的检查方法。158 收藏 -
大文件上传到底该让浏览器把数据交给业务服务,还是直接送到对象存储?本文从流量路径、分片重试、权限边界和完成校验四个维度比较两种方案,并给出基于 Blob.slice、预签名 URL 与 uploadId 的可落地实现边界。448 收藏 -
Golang · Go问答 | 3星期前 | golang · 连接池 · database/sql · Go问答 · 数据库事务 · 连接池 事务 DBStats rows.Close Go database/sql
Go database/sql 里漏掉 Rows.Close,问题往往不是某一次查询报错,而是连接长期被结果集占着,最终让连接池等待堆积。本文从 DBStats 指标和事务生命周期入手,复现现象,解释 Rows、Tx 与连接归还的关系,并给出可复查的代码边界。374 收藏 -
2026年国庆高速公路对7座及以下小型客车免费,时间是10月1日0时至10月7日24时。判断高速是否收费看驶离出口车道的时间,ETC和人工车道按同一规则执行;中秋节9月25日至27日不单独享受国庆免费时段。249 收藏 -
Golang · Go教程 | 3星期前 | golang · https · TLS · Go教程 · 生产运维 · 证书轮换 · atomic.Value Go HTTPS证书热切换 GetCertificate tls.Certificate 证书轮换
Go HTTPS 服务轮换证书时,不必为了替换文件重启进程。本文用 tls.Config.GetCertificate 和 atomic.Value 保存当前证书,演示新连接切换、旧连接保持、加载失败回退与指标核对,给出适合生产灰度的实现边界。267 收藏 -
MySQL 分区表按时间清理历史数据时,逐行 DELETE 可能带来长事务、undo 增长和锁等待。本文从一次线上删除变慢的现象出发,说明如何确认分区边界、选择 DROP PARTITION,并用复查动作验证空间和业务影响。316 收藏 -
接口偶发超时,不一定要先抓完整报文。借助 Linux 内核 TCP tracepoint 和 bpftrace,可以先统计重传发生在哪个进程、频率如何,再决定是否深入网卡、路由或应用层。106 收藏 -
Go 中用 buffered channel 或 golang.org/x/sync/semaphore 限制并发都能工作,但取消传播、加权资源和任务排队方式不同。本文从一个批量抓取场景出发,对比两种实现的边界,并给出选择与验收清单。384 收藏 -
日志轮转后 df 仍显示磁盘快满,常见原因不是旧日志还在目录里,而是进程仍持有已删除文件的文件描述符。本文用 df、du、lsof 和服务管理器日志命令逐层确认占用来源,并给出不误杀业务进程的恢复步骤。469 收藏 -
Go 服务把 regexp.Compile 放进请求路径后,p99 往往先于 CPU 告警变差。本文用一组可复现的基线对比,说明预编译、有限缓存和输入边界各自解决什么问题,并给出可验收的 benchmark 方法。271 收藏 -
Redis 开启 AOF 后,后台重写可能让延迟突然抖高。本文用 INFO persistence、内存和磁盘指标拆开判断 fork、写时复制、AOF 增量与磁盘瓶颈,并给出安全验收与回退方法。467 收藏 -
Golang · Go问答 | 3星期前 | golang · 错误处理 · 泛型 · Go问答 · Go 1.26 · errors.As Go问答 Go 1.26 errors.AsType 泛型错误处理
Go 1.26 为 errors 包增加了泛型函数 AsType,让调用方可以直接拿到指定错误类型,减少 errors.As 的目标变量和类型断言。本文从订单校验错误的实际场景出发,对比新旧写法、兼容边界和测试验收方式。255 收藏 -
Golang · Go教程 | 3星期前 | HTTP · go · 浏览器 · 前端数据上报 · Go Beacon API navigator.sendBeacon 页面关闭上报 Go HTTP 接收 Beacon keepalive fetch
页面关闭、切换标签页或手机锁屏时,普通 fetch 可能来不及把埋点送到服务端。本文用 Go 接收 navigator.sendBeacon 的 POST 请求,拆开 Content-Type、204 响应、队列大小与 keepalive fetch 兜底边界,给出可验证的处理方式。140 收藏 -
Go 1.23 引入 range-over-func 与 iter.Seq 后,切片筛选、转换和提前停止可以组成惰性流水线。本文用可运行示例说明 yield、break、slices.Collect 的关系,以及从旧循环迁移时要避开的副作用边界。226 收藏