Go教程技术文章
-
解释 Go http.Request.Clone 为什么不能让多个请求重复读取同一份 Body,并给出受限缓存、独立 Reader 和 GetBody 重试方案。237 收藏 -
Go Timer 配合 Stop 要区分新旧通道语义。本文说明陈旧事件、排空前提与单一消费者写法,给出完整示例和迁移清单,避免把 false 误当成通道有值。237 收藏 -
Go crypto/ecdh.PublicKey.Bytes 会返回公钥编码的副本,适合放入协议字段或持久化格式;接收端应使用同一曲线的 NewPublicKey 重新解析,并用 Equal 与 Curve 区分对象相等和曲线匹配。本文给出最小写法、错误处理和常见边界。237 收藏 -
本文用一个升序整数切片说明 Go sort.Find 的比较函数写法、found 结果判断、重复值定位和插入位置边界,重点解释为什么 cmp 必须保持正数、零、负数三段结构。237 收藏 -
Go url.URL.Redacted 会像 URL.String 一样重组地址,但只把 u.User 中的密码替换为 xxxxx。本文用解析、日志和错误处理场景说明如何安全输出带凭据的 URL,并厘清查询参数、片段和真正请求发送之间的边界。237 收藏 -
用 Go 1.24 的 os.OpenRoot 固定文件访问根目录,再结合 bufio.Reader.Peek 查看文件头而不推进读取位置;文章同时说明短文件、缓冲区大小、越界路径和符号链接边界的处理方式。237 收藏 -
用 os.DirFS 和 io/fs.WalkDir 遍历一个目录,保留 Go 文件系统约定的相对路径;本文从根目录、回调错误、普通文件筛选和 filepath 转换几个体验点说明如何写成可复用的小函数。237 收藏 -
Go 模糊测试发现失败输入后,会把最小化样本写入 testdata/fuzz。本文说明如何用 -run 单独复现、提交种子文件,并让普通 go test 持续执行这条回归用例。237 收藏 -
slices.Collect 能把 iter.Seq 变成切片,但空序列的结果、容量预估和重复遍历边界容易被忽略。本文用最小代码拆开收集过程,并给出选择容量策略的判断方法。236 收藏 -
Go 1.22 引入的 cmp.Or 可以从命令行、环境变量、配置文件和默认值中按顺序取首个非零值。本文用多层配置示例说明泛型约束、零值语义、布尔开关和表达式求值边界。236 收藏 -
Go strings.Builder 的 String 方法返回当前累计内容,后续 Write 是继续修改 Builder,而不是直接修改已经得到的 string。文章解释 Builder 缓冲区与字符串值的边界,并给出单一所有者、禁止复制非零 Builder、并发隔离和按需 strings.Clone 的处理方式。236 收藏 -
Go 1.23 起,maps.Collect 可以把 iter.Seq2[K,V] 键值序列收集为新的 map。本文从 slices.All 的最小写法讲到自定义 Seq2、重复键覆盖规则,以及 maps.Collect 与 maps.Insert 的选择边界。236 收藏 -
slices.SortedFunc 会收集迭代器并按自定义比较函数排序,但不保证同键元素的原始顺序。本文通过订单案例解释 SortedStableFunc、显式次级键、map 输入顺序与严格弱序比较器的选择。236 收藏 -
使用 Go base64.NewEncoder 和 io.Copy 流式编码文件,避免一次性读取大文件,并正确处理 Close 收尾、填充和错误返回。236 收藏 -
Go filepath.VolumeName 用于提取路径开头的卷名:Windows 盘符路径返回 C:,UNC 共享路径返回 \\host\share,其他平台返回空字符串。本文用跨平台示例拆解返回边界,并说明它与绝对路径判断、路径清理和安全校验的区别。236 收藏