-
Go 迭代器提前停止时,push 模式应在迭代器内部 defer 关闭资源并在 yield 返回 false 后立即 return;iter.Pull 模式则要在取得 next、stop 后立刻 defer stop。本文给出错误边界、包装器写法和可验证的测试清单。
-
Go Resolver.LookupHost 返回的是本地解析器得到的地址切片,不是稳定的主备顺序。容器中的 resolv.conf、hosts 文件、Go/cgo 解析路径和 IPv4/IPv6 排序条件不同,就可能让结果顺序变化。本文给出对照排查和应用层稳定选择方案。
-
用 Go iter.Pull 把 iter.Seq 推送式迭代器转换成按需调用的 next 函数,说明 stop 的释放责任、提前退出和空序列边界。
-
Go net.Conn 的 Deadline 是持续生效的绝对时间,不是下一次读写的等待时长。本文区分总截止时间与空闲超时,并给出读写分离、滑动刷新、清除 deadline 和超时错误判断方法。
-
用 Go 1.23 的 iter.Seq2 为树形索引提供键值遍历时,可让 All 返回中序序列,并让递归 walker 把 yield=false 一路向上返回,从而支持 range break、保持封装且避免构造临时切片。
-
Go 接口输入不必把清洗、字段校验和前端契约拆成三套规则。本文用一个原创注册请求示例说明如何组织原地规范化、错误处理、JSON Schema 生成,以及何时应切换到带上下文的显式 Pipeline。
-
Go 的 time.LoadLocation 需要 IANA 时区数据库。精简容器常删除系统 zoneinfo,导致本机正常的程序在运行镜像中报 unknown time zone。本文说明查找来源,并比较安装、复制与内嵌 tzdata 三种修复方式。
-
netip.Addr 本身就是不可变且可比较的值类型。本文从字符串解析、IPv4-mapped IPv6 规范化、zone、零值和端口边界出发,给出把 IP 地址安全放入 Go map 的实现方式。
-
Go 的 time.Time 同时承载墙上时间和进程内单调读数,但 JSON 只序列化可跨进程解释的日历时刻。本文说明丢失原因,以及持久化时间、耗时测量和时间比较的正确分工。
-
Go 的 netip.AddrPort 用结构化 IP 与 uint16 端口保存地址,IPv6 文本则统一采用 [地址]:端口。本文说明 AddrPortFrom、ParseAddrPort、String、zone 和端口边界,避免日志与连接参数产生歧义。
-
Ticker.Reset 要求间隔严格大于零,零值或负值会直接 panic;动态配置应先解析并校验,停用周期任务则使用 Stop,并在 select 中配合 nil channel。
-
Go 使用 netip.ParsePrefix 解析 CIDR、ParseAddr 解析待判断地址,再调用 Prefix.Contains 即可判断归属;误判时重点检查解析错误、地址族和 IPv4 映射 IPv6。
-
在 Go 泛型约束中,~T 表示底层类型为 T 的全部类型,因此既能接受预声明类型,也能接受以它为底层类型的自定义类型;但方法仍须在约束中显式声明。
-
Go multipart/form-data 可以在一次请求中同时上传文件和重复字段。本文用 multipart.Writer 构造请求,演示服务端从 Form.Value 与 Form.File 读取切片,并说明 boundary、资源关闭和大小限制。
-
调用泛型函数时,只要普通实参或明确的目标函数类型能唯一推断缺失类型参数,通常可以省略;类型参数只出现在结果中、函数值没有目标类型、nil 等实参不提供类型信息时,就要显式填写。泛型类型则始终需要显式类型实参。