Go语言技术文章
-
Go 1.23 引入的 iter.Seq 让 slices.Chunk 可以惰性提供批次,slices.Collect 再把序列接收为可索引切片。本文说明空序列、尾批次和 slices.Clone 的数据所有权边界。144 收藏 -
Go 的 encoding/json 默认会忽略结构体未声明的 JSON 字段。本文用 Decoder.DisallowUnknownFields 在请求边界拒绝拼写错误,说明 json 标签、嵌套结构、单文档尾部检查和可演进事件的取舍。144 收藏 -
Go 1.25 的 net/http 新增 CrossOriginProtection,本文从浏览器请求边界、Handler 接入、可信来源配置和 403 验收入手,拆解它适合解决什么问题以及哪些请求不能误放行。143 收藏 -
json.RawMessage 适合把 JSON 解码延后,但 MarshalJSON 与 UnmarshalJSON 的字节所有权规则不同。本文用最小代码说明何时会复制、何时只是复用已有字节,以及如何避免修改底层切片带来的隐蔽问题。143 收藏 -
fs.WalkDir 面向抽象文件系统,filepath.WalkDir 面向本机文件路径;两者共享 DirEntry 回调,却在路径格式、数据来源和测试方式上有关键差异。本文用同一项目录扫描任务拆开选择边界,并给出可验证的代码写法。143 收藏 -
Go 1.26 放开了泛型类型在类型参数列表中的自引用。用 Adder[A] 拆解类型集合、方法集合与实例化边界,分清普通接口实现和泛型方法,最后给出最小编译检查清单。143 收藏 -
crypto/rand.Read 的契约是填满目标切片。本文说明如何处理长度判断、自定义 io.Reader 的短读、io.ReadFull 以及固定长度随机令牌的业务边界。143 收藏 -
Go 的 string 可以携带任意字节,协议入口不能仅凭类型就认为它是合法文本。本文用 unicode/utf8.ValidString 区分完整 UTF-8、截断序列和业务上不允许的内容,并给出拒绝与记录的落地写法。143 收藏 -
bufio.Writer 会把第一次底层写入错误保存在内部,后续 Write 和 Flush 都返回这项粘性错误。本文说明部分写入、io.ErrShortWrite、Reset 与安全重试的边界。143 收藏 -
gif.EncodeAll 要求 Image、Delay 与非 nil Disposal 按帧对齐。本文给出严格检查、同步筛帧和受控补齐的安全写法。143 收藏 -
Go 1.22 起可以直接用 zip.Writer.AddFS 把 fs.FS 目录树写入 ZIP。本文说明 os.DirFS、fs.Sub、路径前缀、非普通文件和 Writer.Close 的关键边界。143 收藏 -
PATH 是多个路径组成的列表,不能用 filepath.Split 当作单一路径处理。本文对比 ListSeparator 与 Separator,说明 Go 中如何跨平台拆分 PATH,以及空输入、清理和绝对化的边界。143 收藏 -
Go 的 os.ReadDir 默认按文件名返回目录项;如果业务还要按修改时间排序,应先读取 DirEntry.Info,再用稳定排序保留文件名作为平局规则。本文给出可直接改造的实现和错误处理边界。143 收藏 -
Go 的 sync.Cond 不负责保存通知,真正需要等待的是受锁保护的共享谓词。本文从丢失唤醒的症状出发,说明为什么必须用同一把锁配合 for 循环检查条件,并给出 Signal 与 Broadcast 的选择方法。143 收藏 -
Go channel 关闭后,接收方可以用 comma-ok 判断状态,也可以用 range 自动读到结束;真正容易出错的是发送方与关闭方的职责边界。本文用最小示例说明判断、排空和并发收尾的正确写法。142 收藏