Go教程技术文章
-
Go 读取结构体自定义标签时,先通过 reflect.TypeOf 和 Field 拿到 StructField,再用 Tag.Lookup 区分标签缺失与显式空值;Tag.Get 适合只关心字符串的兼容场景,但非约定格式的返回值不应被依赖。291 收藏 -
Go 1.23 的 range-over-function 会把循环里的 break 转成迭代器可识别的停止信号。本文用 iter.Seq、Seq2 和 iter.Pull 说明 yield 返回 false、defer 清理与 stop() 的配合,解决惰性遍历提前结束时资源没有释放的问题。380 收藏 -
iter.Seq2 的 K、V 是按值传给 yield 的,不能靠取 range 变量地址消除复制。本文对比指针返回、ID 句柄和保留值返回,给出生命周期、并发与提前停止的实用边界。441 收藏 -
用 Go 1.23 的 iter.Seq 把 cursor 分页查询包装成惰性遍历,说明 yield 返回值、提前停止、重复游标和错误边界;需要保留页码时再用 iter.Seq2 传递附加信息。203 收藏 -
maps.Keys 返回的键迭代顺序并不保证一致。本文用 slices.Sorted 和兼容写法,把 map 键转换为可复现的排序切片,并解释稳定结果与稳定排序算法的区别。158 收藏 -
用 Go maps.Copy 合并默认配置和覆盖配置,明确 dst/src 的覆盖方向,处理 nil 目标 map,并说明嵌套切片等值的浅复制边界。391 收藏 -
Go maps.Clone 只做浅克隆:本文用顶层 map、嵌套 map、切片和指针说明哪些数据独立、哪些仍会共享,并给出按 value 类型选择复制策略的实战判断。501 收藏 -
Go slices.Clone 会复制切片的元素数组,但它是浅拷贝:值类型元素可独立修改,指针、map 或嵌套切片仍需按字段判断是否共享。本文用代码和边界表说明 Clone、copy 与深拷贝的选择。430 收藏 -
slices.Insert 批量插入是否复用底层数组,先看插入后的长度是否超过原切片容量,再结合尾部或中间插入位置判断移动成本。本文给出容量判断、别名边界与可复查验证代码。109 收藏 -
Go 1.22 及以上的 slices.Delete 会清零删除后的尾部元素。本文用指针切片说明为什么必须接住返回值,以及旧写法、切片别名和 Clone 应该怎样处理。200 收藏 -
Golang · Go教程 | 2星期前 | 定时任务 · Context · 并发编程 · Go教程 · select time.Ticker context取消 goroutine退出 Go ticker
Go 定时循环阻塞在 ticker.C 时,应该把 ctx.Done 与 ticker.C 放进同一个 select,并把 context 继续传给业务处理;退出路径里调用 ticker.Stop,再等待 worker 收尾。本文区分 Stop、Reset 和重新创建,避免 goroutine 泄漏与错误的通道判断。490 收藏 -
Go 定时刷新配置时不要在每次配置变化里 NewTicker;让一个控制协程拥有 ticker,周期变化调用 Reset,退出时统一 Stop。161 收藏 -
Go 长循环使用 time.Ticker 时,关键是把退出信号与 ticker.C 放进同一个 select,并在拥有 ticker 的函数退出路径调用 Stop;需要改周期时使用 Reset,同时用完成通知确认 goroutine 已结束。211 收藏 -
Go 定时任务如果依赖地区本地时刻,应使用 IANA Location 保存夏令时规则,并用 ParseInLocation 解析无偏移的时间字符串。本文给出加载、解析和运行前检查的完整边界。363 收藏 -
Go 的 time.LoadLocation 在精简容器中报 unknown time zone,通常是运行环境缺少 IANA 时区数据。本文按查找顺序、镜像补齐、time/tzdata 嵌入和 ParseInLocation 验证给出处理方案。403 收藏