Go语言技术文章
-
strings.Builder.Grow 传入的是额外可写字节数,不是最终总容量。本文用 Len、Cap 和 UTF-8 字节预算拆解如何预估容量、控制上界并避免过度分配。292 收藏 -
context.AfterFunc 的 stop 函数只负责阻止尚未启动的回调,不保证等待。本文用 sync.Once 和 done 通道封装主动 Close 与 Context 取消,避免资源清理重复执行。292 收藏 -
Go errgroup 的并发上限和取消传播是两套机制。本文用 WithContext、SetLimit、TryGo 和 Wait 说明任务组的取消边界、提交背压与待处理任务的收口方法。292 收藏 -
从 goroutine 堆栈定位 Go 结果 channel 的 chan send 阻塞,区分无缓冲、满缓冲和 nil channel,并用 context、select、WaitGroup 补齐接收、取消与关闭路径。292 收藏 -
Go 1.23 引入 filepath.Localize,用于把 io/fs 的斜线路径安全转换为当前操作系统路径。本文比较 Localize、ValidPath 与 FromSlash 的边界,给出输入校验、跨平台错误处理和 API 选型示例。292 收藏 -
Golang · Go教程 | 3星期前 | 标准库 · JSON · go语言 · 后端开发 · Go JSON反序列化 encoding/json/v2 MatchCaseInsensitiveNames 字段名匹配
Go encoding/json/v2 默认按大小写精确匹配字段名;本文用 MatchCaseInsensitiveNames、case:ignore、case:strict 与分隔符兼容选项,讲清调用级统一策略、字段级例外、歧义与重复名风险,并给出迁移测试清单。292 收藏 -
runtime/secret.Do 通过编译器与运行时协作,减少机密数据在寄存器、栈和堆上的残留,但它不把普通优化结果变成语言规范保证。本文梳理两者的职责边界、返回值设计和兼容限制。292 收藏 -
Go 标准库 flag 的 String 适合单值参数,但命令行工具经常需要重复传入 -include。本文比较单值、逗号分隔、flag.Func 和自定义 flag.Value 四种方案,给出可直接复用的切片收集实现,并说明默认值、空值和 FlagSet 隔离场景。292 收藏 -
Go modules 用主模块 replace 将依赖源码映射到本地模块根目录,保留原 import 与 require。通过原创联调示例说明版本范围、工作区影响、CI 路径风险和撤销替换的方法。292 收藏 -
Go 时间格式化与本地时区不同,通常来自时间值 Location、输入解析语义或部署环境差异。通过显式加载业务时区、使用 In、区分 ParseInLocation 与展示转换,并为容器提供时区数据,避免固定加小时造成错误。292 收藏 -
QueryUnescape 遇到不完整或非十六进制的百分号转义时会返回 EscapeError。本文说明如何保留原始值、定位坏片段、理解加号语义,并处理 ParseQuery 的部分成功结果。292 收藏 -
Go 的 net.Listener 接口没有 File 方法。本文说明怎样断言到 TCPListener 或 UnixListener,使用 File 导出 os.File 副本,并区分 SyscallConn、资源所有权和平台边界。292 收藏 -
Golang · Go问答 | 1星期前 | 性能优化 · bufio · Go问答 · Go write FLUSH bufio.Writer available buffered NewWriterSize
Go bufio.Writer 的缓冲区大小应围绕写入粒度、并发量和内存预算选择。本文用 NewWriterSize 设置容量起点,说明 Buffered、Available、Size 的观察方式,并把 Flush、Close 和错误处理放入完整的资源边界。292 收藏 -
区分tar硬链接与符号链接的目标语义,解释前向引用失败原因,给出延迟依赖解析组件,说明缺失目标、循环依赖、创建错误及接口兼容策略。292 收藏 -
Go 的 time.Timer 不是改一个时间数字那么简单:Reset 前要先处理已经到达的旧事件,重置后还要保证只有一条超时路径能结束本次等待。本文用可复现的请求超时流程说明 Reset、Stop、通道读取和 context 的边界。291 收藏