Go语言技术文章
-
maps.Keys 返回的是可迭代的键序列,不是现成切片。本文用 Go 1.23 的 range 语法收集 map 键,说明 nil map 与空 map 的结果,并提醒 map 键的迭代顺序不能当成稳定排序。177 收藏 -
maps.EqualFunc 先比较两个 map 的长度,再按键查找并调用自定义值比较函数,所以 nil map 与空 map 都因长度为 0 而返回 true。本文拆解源码规则,给出最小示例,并说明如何在业务上区分 nil 与空。187 收藏 -
Go flag.FlagSet 使用 ContinueOnError 后,Parse 会返回帮助请求或参数解析错误。本文说明如何用 SetOutput 捕获默认输出、用 errors.Is 区分 flag.ErrHelp,并自定义 Usage 处理子命令和测试场景。501 收藏 -
Go flag.BoolFunc 每次遇到开关都会回调。通过 ParseBool 与局部累计对象保留重复布尔值,区分出现次数、真值次数和最后状态,并说明显式 false、解析错误与状态重用的边界。340 收藏 -
Go 的 exec.Cmd.Env 遇到同名环境变量时,最终采用切片中最后出现的值。本文区分 nil 继承、显式环境、Cmd.Environ 追加覆盖、空值与 Windows 特殊边界,给出可直接套用的构造方式。305 收藏 -
Golang · Go问答 | 4天前 | 标准库 · go · Go Content-Disposition mime/multipart NextPart NextRawPart quoted-printable
对比 Go multipart.Reader 的 NextPart 与 NextRawPart,说明 Content-Disposition 并非核心差异,重点解释 quoted-printable body 的透明解码边界与入口选择。367 收藏 -
Go 的 multipart.FileHeader.Open 返回一个可读取、可关闭的文件接口。本文说明如何在打开成功后及时安排 Close,怎样分别处理读取与关闭错误,以及为什么它和 Form.RemoveAll 不是同一件事。446 收藏 -
Go database/sql 的 Null[T] 用 Valid 表示当前值是否为 NULL,V 只在 Valid=true 时作为业务值读取。本文按现象、证据和修复动作说明 Scan、Value、有效零值与类型转换错误的边界。403 收藏 -
Go ServeMux 优先级取决于方法与路径共同限定的匹配集合。用库存路由示例解释严格子集、GET 与 HEAD、固定段与通配符,以及交叉模式为何注册时冲突,并说明兜底路由的取舍。193 收藏 -
动态查询不能把所有列都写死成 string 或 int64。本文用 ColumnType.ScanType 生成 Rows.Scan 的指针目标,并说明 NULL、[]byte、驱动不支持类型信息和 rows.Err 的处理边界。110 收藏 -
Go database/sql 的 ColumnType.Nullable 返回 nullable 和 ok 两个值。本文解释驱动不支持时为什么不能把 false 当成不可空,并给出跨数据库代码保存 unknown、按需做方言适配的兼容写法。394 收藏 -
io.MultiReader 会把多个 Reader 顺序拼成一条流,中间 Reader 的 EOF 会被内部消费,调用方只能看到最终 EOF。本文用包装 Reader 记录每个文件的结束事件和字节数,并说明错误处理、文件关闭与不应合并的场景。329 收藏 -
Go SetEscapeHTML(false) 适用于需要可读字符的独立 JSON 输出。通过完整示例区分字节表示与解析值,并说明 JSON 必要转义、末尾换行、二次编码及固定字节契约的边界。420 收藏 -
用 Go io.ReadFull 读取固定长度协议帧,区分正常 EOF、半包 ErrUnexpectedEOF 与底层 I/O 错误,并给出长度校验和循环读取示例。405 收藏 -
bufio.Reader.ReadBytes 找不到分隔符就会同时返回已读片段和错误。本文以带读取期限的长连接为例,说明怎样保留超时返回的数据,在同一个 Reader 上延长 deadline 后继续拼接,并区分临时超时、EOF 与不可恢复错误。390 收藏