Go教程技术文章
-
Go net/mail.ParseAddress 将单个邮件地址解析为显示名和邮箱字段。通过原创联系人示例比较手动切分与标准库解析,说明引号逗号、错误处理和格式化文本的区别。279 收藏 -
Windows 下 filepath.Rel 遇到 C: 和 D: 这样的不同盘符时不能构造相对路径。本文解释 VolumeName 与 Rel 的边界,给出同盘计算、跨盘兜底和测试约定,避免把错误吞掉。157 收藏 -
围绕 filepath.Rel 计算文件相对路径时最容易出现的目录基准误用,说明 basePath 的含义、跨目录返回 .. 的边界、相对绝对路径错误,以及输出到 URL 或清单时的分隔符转换。403 收藏 -
Go SHA-512 的 Sum 会在已有切片末尾追加二进制摘要。通过报文前缀示例区分 Write 输入与结果前缀,说明返回值、长度容量、摘要区间和十六进制文本的不同。389 收藏 -
Go sort.Search 并不要求把数据重新排成升序。本文从第一个 true 的返回语义出发,说明降序切片为什么使用 data[i] <= target,并处理精确命中、重复值、未找到和 len(data) 边界。222 收藏 -
Go 的 crypto/sha512 同时提供 New512_256 和 New512。本文从算法身份、摘要长度、流式接口和协议迁移边界说明两者区别,并给出同一输入下的并排计算示例。178 收藏 -
sort.Search 找的是谓词第一次返回 true 的位置,不是直接判断相等。本文用升序和降序切片说明先 false 后 true 的单调条件,并处理未命中、重复值、空切片和插入位置。479 收藏 -
reflect.VisibleFields 会把匿名嵌入结构中的可见字段和未导出字段一起返回,真正的导出筛选要交给 StructField.IsExported。本文用一个包含嵌入结构的例子说明如何保留提升字段、处理 Index,并封装成可复用函数。483 收藏 -
从运行时值、泛型类型参数和接口类型三个角度比较 reflect.TypeFor 与 TypeOf 空指针技巧,说明 nil interface 陷阱以及该怎样选择更直观的写法。126 收藏 -
围绕 sync.Map.Range 回调内删除当前键的场景,说明 Delete 为什么可以调用、Range 为什么不是一致快照,以及缓存清理时如何选择实现。191 收藏 -
用一个小型 Go 任务队列说明 sync.Cond.Signal 与 Broadcast 的选择边界:单个资源变化唤醒一个等待者,全局条件变化广播全部等待者,并解释 Wait 为什么必须放在 for 循环里。152 收藏 -
sync.Cond 可以在首次使用前完成初始化,但首次 Wait、Signal 或 Broadcast 后不应再复制。本文结合 Locker、等待状态和常见值传递场景,说明为什么要用指针持有 Cond。422 收藏 -
bytes.Reader.WriteTo 会消费当前未读区间,完整导出后 Len 变为 0。本文解释读取索引为什么推进,并给出复用 Reader、重读原始字节和随机读取时的安全写法。450 收藏 -
bytes.Reader.Seek 判断的是最终绝对位置。定位到数据开头之前会返回 0 和 negative position 错误,原读取位置保持不变;越过末尾则可成功,但后续读取会得到 EOF。403 收藏 -
Go token.File.SetLines 返回 false,通常不是 API 随机失败,而是行首偏移没有满足严格递增、范围小于文件长度等约束。本文用一组可定位的判断方法说明如何构造行偏移表,并把它接回 Pos、Line、Offset 与 Position 查询。200 收藏