Go教程技术文章
-
讲清 Go text/template 如何通过 FuncMap 注册自定义函数,为什么必须先 Funcs 再 Parse,以及如何处理函数签名、error 返回和生产环境初始化顺序。125 收藏 -
介绍 Go regexp 命名捕获组的读取方法:用 SubexpNames 对齐名称和匹配结果,用 SubexpIndex 定点取值,并安全处理 nil、-1、可选组和动态正则编译错误。374 收藏 -
Go time.Date 不会校验并拒绝超范围日期,而是把月份、日期和时间字段归一化。本文用月末构造示例说明 day=0 的含义,并梳理时区、AddDate 和 nil Location 的常见坑。306 收藏 -
Go time.Ticker 只负责按周期发送时间信号,不会自动结束 goroutine。本文用 context、select 和 WaitGroup 实现可停止的周期任务,并说明 Stop 不关闭通道、慢任务丢 tick 和 Reset 的边界。309 收藏 -
用 time.ParseDuration 解析带单位的毫秒和秒输入,再通过范围校验保护超时、重试和定时器配置,避免裸数字和单位误解。485 收藏 -
Go unsafe.Slice 可以从 *byte 指针和长度构造共享底层内存的字节切片,但不会复制、扩容或管理内存。本文说明 nil 与零长度、真实对象边界、指针生命周期和读写权限的使用契约。225 收藏 -
reflect.StructOf 遇到重复字段名会直接 panic。本文从字段去重、参数边界、局部 recover 和表驱动测试四个方面,给出可诊断的动态结构构造方式。243 收藏 -
讲清 Go reflect.Value.IsZero 在 nil 接口、typed nil 指针和接口容器之间的判断边界,给出先检查 IsValid 的安全写法与复查清单。413 收藏 -
Go 标准库 maps.Clone 可以复制 map 的顶层键值结构,并保留 nil 输入的语义。本文用最小示例说明普通复制、nil 与空 map、浅复制边界、自定义 map 类型和旧环境替代写法。423 收藏 -
Go 1.23 的 slices.Collect 可以把 iter.Seq 迭代器结果收集成新的切片。本文说明 slices.Values、自定义序列、nil 结果、深拷贝边界,以及已知长度时如何用预分配 append 控制容量。432 收藏 -
slices.Clip 会把 Go 切片的 cap 收紧到 len,避免后续 append 复用多余容量;但它不复制底层数组,真正要释放长期持有的大数组仍需建立独立副本。478 收藏 -
用一个 Go 类型约束同时覆盖整数底层类型和自定义方法,讲清 ~T、定义类型、类型别名与方法集之间的关系。468 收藏 -
Go 1.27 已支持具体类型的泛型方法,但旧工具链、低版本 go.mod 和接口方法仍有边界。本文用 Box、Pair 示例说明排错与兼容写法。163 收藏 -
用 ~ 底层类型约束定义可参与运算的 Go 泛型函数,让 PriceCents、Meters 等自定义数值类型复用 Sum,并理解类型推断和混合参数的边界。408 收藏 -
解释 Go benchmark.ResetTimer 的正确调用位置,区分准备阶段、计时区间、子基准和并行基准的边界,避免 ns/op 与分配数据被错误污染。331 收藏