Go教程技术文章
-
Go encoding/json.Encoder.Encode 会省略 JSON 内部无意义空白,但每次编码后固定追加一个换行。本文按单体接口、连续 JSON 流和可读调试三种场景,说明 Marshal、Encoder、TrimSuffix 与 SetIndent 的选择。352 收藏 -
用一个消息分发小工具演示 Go RawMessage:先读 kind,再把 payload 解析成通知对象或标签数组,并处理缺失、null、未知类型和输入大小限制。246 收藏 -
Go 的 encoding/json 没有给某个字段单独绑定 Reader 的接口。本文用自定义 UnmarshalJSON 检查字段字节数,再在 HTTP 入口限制整个请求体,说明字段超限、请求体超限、语法错误和类型错误的处理边界。436 收藏 -
Go bufio.Reader 读取协议行时,ReadString 和 ReadBytes 会保留分隔符,ReadLine 会去掉行尾,ReadSlice 还涉及缓冲区生命周期。本文从排查现象出发,给出保留 LF、CRLF 和自定义分隔符的写法。501 收藏 -
使用 Go encoding/csv 正确读取带引号的多行字段,掌握 FieldsPerRecord、LazyQuotes 与 ParseError 的边界。369 收藏 -
Go Scanner 默认 token 缓冲约为 64 KiB,超长日志行会让 Scan 停止。本文说明如何在首次 Scan 前设置 Buffer、如何处理 Err,以及何时改用 bufio.Reader。266 收藏 -
Go 的随机定位能力不是所有 Reader 都具备。本文用 io.Seeker 和 ReadSeeker 讲清接口断言、SeekStart/SeekCurrent/SeekEnd、返回偏移、越界与资源关闭边界,并给出不支持定位时的降级策略。355 收藏 -
用 Go time.Time.AppendFormat 把时间文本追加到已有 []byte 缓冲区,说明返回值、循环复用容量、布局时区和基准判断边界。155 收藏 -
Go bytes.Buffer 的读写状态混乱,通常来自把 unread 区域、写入追加和 Bytes 返回的别名混在一起。本文用 Len、Cap、Available 和最小代码示例说明如何分离读写阶段、处理别名、复用缓冲区并定位 EOF。123 收藏 -
本文用 Go 1.23 的 iter.Seq 和 iter.Seq2 讲清 range over func 的回调迭代器接入方式,覆盖 yield 停止信号、资源清理、Seq2 与旧版本兼容边界。117 收藏 -
Go select 不会自动超时,需要把 time.After 或 time.NewTimer 放进 select,并同时处理结果、通道关闭、context 取消和后台发送阻塞。本文用原创示例说明一次等待、循环复用和生产环境的收尾边界。203 收藏 -
Go mime.TypeByExtension 需要传入带点的文件扩展名,未知映射返回空字符串,并可能受到系统 MIME 数据影响。本文从文件名提取、大小写处理、自定义映射和上传安全边界四个方面说明如何正确使用。456 收藏 -
Go slog.Handler 的级别筛选可以先用 HandlerOptions.Level 完成固定阈值,再用 Enabled 和 LevelVar 实现可调整策略。本文用最小示例说明过滤位置、代理方法和常见误区。276 收藏 -
Go 反射更新结构体字段时,reflect.Value.SetZero 可以把可设置值恢复为其类型零值。本文用字段更新场景说明 CanSet、指针 Elem、未导出字段和 map/slice 清空之间的边界。388 收藏 -
Go 1.25 的 net/http 提供 CrossOriginProtection,可以在 Handler 层拒绝非安全的跨源浏览器请求。本文从保护范围、可信 Origin、拒绝处理器和认证边界四个方面给出一套可落地的写接口接入方式。464 收藏