Go语言技术文章
-
Go trace 的 scheduler latency 与 CPU profile 统计对象不同。本文用同一段负载采集两份画像,解释如何区分调度排队、CPU 热点和阻塞等待,并给出复采检查清单。460 收藏 -
从闭包变量绑定、Go 版本语义和 Timer 生命周期三个方向,排查循环创建 Go 定时回调时业务标识错位,并给出可落地的修复与回归清单。460 收藏 -
讲清 Go 1.27 泛型方法为什么不能直接满足接口,并比较非泛型桥接、参数化接口与顶层泛型函数三种兼容设计。460 收藏 -
Go 接收外部 JSON 后,先规范化再一次收集字段错误,能让接口边界更稳定。本文用标准库重组一套可复用的输入处理方式,并说明什么时候值得生成 JSON Schema。460 收藏 -
用一个带版本、标志和长度字段的 Go 二进制帧解析器,演示如何设计 f.Add 种子语料,并在 FuzzParseFrame 中断言长度一致、保留位合法、编解码回环和内存独立性。460 收藏 -
Go 1.24 起可用 http.Server.Protocols 显式限定服务端协议集合。本文给出只启用 HTTP/1 与 TLS HTTP/2 的最小写法、完整服务代码、客户端协商检查,以及明文 HTTP/2、旧 TLSNextProto 配置和反向代理场景的兼容边界。460 收藏 -
tview Table 打开选择后,部分单元格仍可能因为 NotSelectable、nil 内容或点击回调而无法进入预期选择。本文按表级开关、单元格状态和事件边界给出排查与修复方法。460 收藏 -
在 Go 的 MarshalJSON 中复用默认结构体编码时,使用不带方法的新定义类型切断递归;本文给出安全写法、扩展字段方式,以及真别名和指针接收者的边界。460 收藏 -
用最小字段写入示例讲清 Go reflect 的 Kind、CanSet 与 nil 接口,区分无效 Value、nil 指针和可写字段,并给出字符串及 *string 的安全处理方式。460 收藏 -
重复压缩短消息时,每次调用 flate.NewWriter 都会重新建立编解码器。本文围绕 Writer.Reset、Close、Flush 和 Reader 的 Resetter 接口,说明怎样复用编解码器、切换输出目标,并处理池化对象的生命周期与异常大缓冲。460 收藏 -
Go 写文件后读不到最新内容,应先区分用户态缓冲与文件同步。本文说明 bufio.Writer.Flush、os.File.Sync 和 Close 的职责,用独立临时文件演示错误处理,并解释读取游标、旧读取缓冲与持久化目标的差别。460 收藏 -
Go 的 exec.Cmd.Wait 不只等待子进程退出,还会等待标准输入输出相关的复制协程。若后代进程继承 stdout 或 stderr 的写端,父进程退出后仍可能等不到 EOF。本文说明如何排查 StdoutPipe 读取顺序,使用 WaitDelay 设定收口上限,并区分 ErrWaitDelay、ExitError 与上下文取消。460 收藏 -
Go 查询参数中的裸加号会按空格处理,字面加号应编码为 %2B。本文区分查询与路径规则,给出 Values 编码示例,并解释重复解码、格式错误和签名地址的处理边界。460 收藏 -
Go 的 archive/zip 会把 ZIP 条目的外部属性保存在 FileHeader.ExternalAttrs 中,但这个 uint32 的含义取决于 CreatorVersion。本文用读取示例说明如何保存原始字段、调用 Mode() 转为 fs.FileMode,并处理平台、目录和符号链接边界。460 收藏 -
time.Time.MarshalText 会把零值时间编码成合法的 RFC 3339 文本,而不会自动变成空字符串或被省略。本文说明如何用 IsZero 判断零值,区分文本接口与 JSON 字段策略,并选择值类型、指针或包装类型。460 收藏