Go语言技术文章
-
说明 Go runtime.AddCleanup 的输入与引用边界,通过独立清理状态、显式 Close 和幂等释放示例,解释 nil、闭包反向引用、KeepAlive、Stop 及不保证回调时机等问题,并给出计数与测量方法。345 收藏 -
Go 1.24 同时提供 runtime.AddCleanup 和 os.Root。本文用一个可显式关闭的读取器,把文件名限制在指定根目录内,并说明 GC 清理兜底、KeepAlive、Stop 与错误处理边界。382 收藏 -
Go unique.Make 只接受 comparable 类型并返回 Handle,不会替业务规则返回 error。本文用空字符串、nil 指针和不可比较类型说明处理边界,再给出先校验、后规范化、按需保留句柄的工作流。202 收藏 -
Go 1.23 新增的 unique.Make 可以把 comparable 值规范化为可比较的 Handle。本文从字符串标签注册场景出发,组合一个小型工具,说明去重、Handle 比较、Value 读取以及并发边界。413 收藏 -
unique.Make 没有缓冲区参数。本文用 Go 逐行标签程序说明如何复用 Scanner 缓冲、转换稳定字符串并保存句柄,区分值去重与记录去重,同时解释输入限制、生命周期和性能判断边界。134 收藏 -
unique.Make 的第一道边界由 comparable 类型约束决定,第二道边界要由业务代码自己定义。本文用高并发标签去重场景拆开编译期约束、运行时校验、相等语义和并发使用方式,给出可直接复用的规范化入口。152 收藏 -
unique.Make 不负责打开文件。本文用 os.DirFS、fs.ValidPath 和 fs.ReadFile 在固定根目录下读取文件,再把文件内容交给 unique.Make 做规范化,并说明符号链接、可比较类型和 Go 版本边界。476 收藏 -
reflect.TypeFor 读取的是泛型参数的静态类型,不会因为没有动态值而返回空类型;真正需要单独处理 nil 接口的是 reflect.TypeOf。本文用一个类型描述小工具串起两种 API,并处理 Kind、Elem 和不支持展开的异常分支。243 收藏 -
说明 reflect.TypeFor[T]() 只负责取得泛型类型元数据,如何把它作为类型计划缓存键,再由调用方通过 dst[:0] 复用已有 []byte 容量,并处理异步消费与超大容量边界。501 收藏 -
用 Go reflect.TypeFor 和 Implements 构建类型能力检查工具,按候选名称判断 io.StringWriter 接口支持情况,提供完整代码、退出码与回退思路,并区分类型匹配和实例可用性。396 收藏 -
reflect.TypeFor[T]() 适合固定泛型目标类型,但它不会替你判断运行时值。本文从 nil、Kind、AssignableTo、Implements 和 ConvertibleTo 五个角度,写出可复用的 Go 反射类型边界判断。501 收藏 -
reflect.TypeFor 只负责获取泛型类型的 reflect.Type,受限目录读取应交给 Go 1.24 的 os.OpenRoot 与 os.Root.Open。本文把两者组合成一个可复用的相对路径读取示例,并说明版本、路径和资源关闭边界。292 收藏 -
用 Go iter.Pull 构建受限整数收集器,区分 nil 迭代器、空序列、合法零值、解析错误与提前停止,提供完整代码,并解释 defer stop、panic 传播和资源清理的边界。483 收藏 -
用 Go 1.23 的 iter.Pull 把 push-style 迭代器接入一个可复用的 TakeUntil 工具,讲清 next、stop、提前退出和并发边界。316 收藏 -
iter.Pull 不负责管理调用方的缓冲区。本文用 dst[:0] 保留 slice 容量,演示如何逐项拉取、提前停止和处理切片别名,并说明何时直接使用 slices.AppendSeq。429 收藏