Go语言技术文章
-
用 Go 的 net/netip 判断地址是否属于指定网段:先解析 Addr 和 Prefix,再调用 Prefix.Contains,同时处理解析错误、IPv4/IPv6 匹配与非规范 CIDR 边界。387 收藏 -
逐层复制url.Values的map和值切片,保留空值语义,并通过同步分页编码演示工作副本复用,说明并发交接和分配边界。183 收藏 -
Go url.Values 是 map[string][]string,直接赋值或复制切片引用会共享底层数组。本文用 make 与 copy 实现完整深拷贝,并说明单键隔离、Set 与 Add、nil 值、并发访问和 Encode 边界。446 收藏 -
url.Values 本质是 map[string][]string,直接赋值或只复制 map 仍可能共享值切片。本文用 Values.Clone 和兼容性辅助函数完成独立副本,并说明 Set、Add、Del、nil 输入与并发边界。203 收藏 -
Go 的 path 包负责斜杠路径处理,不负责 URL 百分号转义。本文用一个批处理场景说明怎样只转义单个路径片段、避免路径层级被输入打乱,并减少重复组合带来的额外分配。398 收藏 -
说明Go path与net/url的职责,给出单片段转义和URL构建示例,定位RawPath为空、双重编码、加号与编码斜杠问题。500 收藏 -
说明Go path.Join与net/url.PathEscape的职责边界,演示只转义一个动态URL路径片段,并用输入检查封装成可复用的资源路径构造函数。437 收藏 -
用 fmt.Formatter 为批处理记录定义稳定的格式化输出,正确读取 verb、flags、width 和 precision,并通过直接写入 fmt.State 减少临时字符串;同时避开 Format 递归和过度优化。264 收藏 -
Go fmt.Formatter 要通过 Format 方法把内容写入 fmt.State;只实现方法签名还不够。本文用自定义指标类型说明动词分派、宽度精度、值与指针接收者、别名类型防递归,以及输出为空或不符合预期时的排查顺序。103 收藏 -
通过TicketID实现fmt.Formatter,复用宽度与精度,区分字符串展示和数值格式,并说明递归、Stringer优先级与采用边界。250 收藏 -
批处理遇到多个失败项时,可以先收集非 nil 错误,再用 errors.Join 保留完整错误树。本文说明 errors.Is、errors.As 与 Unwrap() []error 的关系,并给出减少额外分配的循环写法。293 收藏 -
用一个可复用的 Go 最小示例说明 errors.Join 如何同时保留多个底层错误,解释 nil 处理、错误树检索、errors.Is/As 的选择,以及不要误用 errors.Unwrap 的边界。232 收藏 -
Go errors.Join 可以把多个非 nil 错误组合成一个可继续用 errors.Is 和 errors.As 检查的错误树。本文解释为什么全 nil 输入会得到 nil、多个错误的文本为何换行,以及如何在批量处理里保留每个底层错误。233 收藏 -
通过有界环形队列说明sync.Cond广播、循环等待与关闭语义,复用存储和固定工作协程,并讨论分配、背压及业务完成边界。328 收藏 -
Go sync.Cond 通过 Broadcast 唤醒当前等待的全部协程,但通知不等于条件成立,也不负责复制或保存结果。本文用共享状态示例说明 Wait 为什么必须放在 for 中,并排查广播后结果为空的常见原因。464 收藏