Go语言技术文章
-
Go 的 os.ReadFile 遇到符号链接时默认读取链接目标内容;本文对比 ReadFile、Stat、Lstat 和 Readlink,说明如何区分目标文件、链接自身与链接保存的路径。483 收藏 -
Go gzip 解压后文件名为空,通常不是数据损坏,而是 gzip Header 没有可选的 Name 字段。本文说明如何在 Writer 端保存文件名、在 Reader 端读取并处理空值,以及跨系统传输时怎样设计可靠的文件名兜底。483 收藏 -
Go heap 默认存活视图可能看不到已回收的短命对象。切换 alloc_space、alloc_objects,并结合业务观察窗口、MemProfileRate 与实际堆分配,区分分配压力和存活容量,避免误判泄漏或盲目提高采样精度。483 收藏 -
reflect.VisibleFields 会把匿名嵌入结构中的可见字段和未导出字段一起返回,真正的导出筛选要交给 StructField.IsExported。本文用一个包含嵌入结构的例子说明如何保留提升字段、处理 Index,并封装成可复用函数。483 收藏 -
Go 的 weak.Pointer 不会阻止对象回收,但 finalizer 会临时复活对象。本文说明旧弱指针为何在 finalizer 排队时失效,以及如何通过禁止强引用逃逸、改用 runtime.AddCleanup、按缓存未命中重建对象来消除复活风险。483 收藏 -
解释 Go //go:embed 为什么在目录递归时排除以点号或下划线开头的文件,比较目录名、当前层通配符与 all: 前缀的差异,并给出精确嵌入、结果检查和安全边界。483 收藏 -
用一个共享 map 的最小测试复现 Go 并发读写竞态,说明 go test -race 的触发边界,并用 sync.RWMutex 收拢修复方案。483 收藏 -
Go TLS 配置 MinVersion 后旧客户端无法连接,通常是双方允许的协议版本没有交集。本文用版本范围、握手错误和 ConnectionState 说明如何定位,并给出兼容策略。483 收藏 -
Go 的 regexp.ReplaceAllStringFunc 会把每个完整匹配交给回调,再用回调返回值直接替换。本文用环境标记、标签规范化和版本脱敏说明动态替换、捕获组边界及 API 选择。483 收藏 -
Go 处理用户上传目录或解压目录时,os.Root 可以把文件访问限制在一个根目录内。本文从 Open、ReadFile 和相对路径校验入手,说明目录沙箱如何工作、哪些错误必须保留,以及如何验证越界路径不会被打开。483 收藏 -
strings.Builder 适合高效拼接字符串,但写入后复制会触发运行时检查。本文从零值使用、复制边界和返回字符串的别名风险说明正确写法。483 收藏 -
Go 1.23 的 unique.Make 可以把可比较值规范化为可廉价比较的 Handle,但它不是无条件的字符串驻留池。本文从标签解析缓存场景出发,拆开 Make、Handle、Value 和垃圾回收之间的关系,说明何时值得用、如何保留句柄,以及为什么不能只存 Value。483 收藏 -
Go 模块图裁剪减少部分传递 require 边,不能按 go mod graph 行数推断构建依赖或二进制大小。本文区分要求图、选中版本和包导入视图,并给出版本声明及工作区排查方法。482 收藏 -
Golang · Go问答 | 17小时前 | 标准库 · JSON · Go问答 · 兼容性 · Go UTF-8 encoding/json/v2 encoding/json/jsontext 旧数据 兼容迁移
Go json/v2 默认拒绝 JSON 字符串中的非法 UTF-8,而旧版 encoding/json 会用 U+FFFD 替换。本文说明如何判断失败边界、何时使用 AllowInvalidUTF8,以及怎样保留原始记录并设计可追溯的迁移策略。482 收藏 -
Go 流式响应遇到 Flusher 不支持时,应先区分写入成功与即时可见,再用 ResponseController 判断能力;遇到 ErrNotSupported 就安全降级为完整响应,并单独检查包装器、代理和测试环境。482 收藏