Go语言技术文章
-
Go mutex profile 没有热点时,先用 runtime.SetMutexProfileFraction(-1) 读取开关,再确认采样比例、竞争窗口和 pprof 进程;本文还区分 mutex profile 与 block profile 的排查边界。151 收藏 -
Go select 本身不会提供缓冲空间,带缓冲 channel 负责排队,default 负责满载时立即降级。本文用一个可复用的发送函数说明丢弃、阻塞和退出控制的边界。151 收藏 -
Go encoding/gob 传递接口值时,必须让发送端和接收端注册相同的具体类型。本文用可运行的原创示例说明 gob.Register、接口地址、指针和值类型及 RegisterName 的边界。151 收藏 -
Go 服务收到 SIGTERM 后,ListenAndServe 已经返回但进程仍迟迟不退出,通常不是 Shutdown 失效,而是活跃连接、长请求、HTTP/2 或 hijack 连接没有走完各自的收尾路径。本文用 ConnState、Shutdown 超时和 RegisterOnShutdown 拆开判断顺序,并给出可回归的优雅退出实现。150 收藏 -
Go 的 flag.FlagSet 适合把 start、stop、config 等子命令拆成彼此独立的参数集合。本文从参数隔离开始,说明 ContinueOnError、Usage、Parse 和错误码如何组合,并给出可运行的最小命令行程序。150 收藏 -
slices.Chunk 从 Go 1.23 起把切片分成连续的小段并返回迭代器。本文从一次批处理误改原切片的故障入手,说明尾块、容量裁剪、n 参数和遍历期间修改的边界,给出可验证的安全写法。150 收藏 -
Golang · Go问答 | 1个月前 | 标准库 · golang · 性能 · 字符串处理 · reset strings.Builder bytes.Buffer Go字符串拼接 Go字节缓冲
bytes.Buffer 和 strings.Builder 都能减少反复拼接带来的分配,但它们服务的结果类型不同。本文用日志行拼接、HTTP响应和复用场景对比 Write、WriteString、String、Bytes 与 Reset 的边界,给出可落地的选择规则。150 收藏 -
Go 1.20 引入的 errors.Join 可以把多个失败原因合成一个可匹配的错误。本文用批量校验和并发收口示例,说明遍历顺序、errors.Is/errors.As 的匹配边界,以及如何输出不丢信息的日志。150 收藏 -
Go PGO 没有明显收益时,从生产 profile 的代表性、合并采样时长、default.pgo 位置和 -pgo 对照构建四个边界逐层排查。150 收藏 -
Go 中使用 bufio.Reader.Peek 查看协议头或下一行前缀而不推进读取位置,本文说明逐步探测、切片复制、长行和 ErrBufferFull 的处理边界。150 收藏 -
Go HTTP 请求取消后,Transport 如何处理连接、请求体、响应体和错误?本文按 RoundTrip 的实际边界解释 context.Canceled、超时与连接复用。150 收藏 -
用一个可切换位序的 Go LZW 往返小工具讲清 NewWriter 的 LSB 与 MSB 选择:GIF 用 LSB,PDF 用 MSB,自定义协议需显式约定,TIFF 应使用专用实现。150 收藏 -
围绕一个 map 值从创建、写入、读取到删除的完整生命周期,解释 nil map 与空 map 的差异、并发访问为何需要同步,以及如何用最小检查确认修复有效。149 收藏 -
用 Go embed.FS 读取内嵌模板时,路径必须是相对且规范化的 slash 路径。本文从路径校验、fs.ReadFile 错误分层和测试验收三个角度,给出可直接落地的安全读取函数。149 收藏 -
Go 的 database/sql 不会统一改写占位符,? 还是 $1 取决于数据库驱动和后端语法。本文用 MySQL 与 PostgreSQL 对照示例,说明参数值、表名列名和跨数据库适配的边界。149 收藏