Go教程技术文章
-
Go TCP 是字节流,不能把一次 Read 当成一条消息。本文用 4 字节大端长度前缀设计帧协议,演示如何用 io.ReadFull 处理半包与粘包、限制最大帧大小,并补齐发送端的部分写入处理。407 收藏 -
Go 处理大文件时不要先读入完整 []byte。本文用 base64.NewEncoder 和 io.Copy 流式转换,说明 encoder.Close 的必要性,并比较标准、URL 安全和无填充 Base64 的适用场景。394 收藏 -
Go 结构体切片按多个字段排序时,先比较主字段,只有主字段相等才比较次字段。本文用 slices.SortFunc 给出姓名升序、年龄升序及混合升降序写法,并说明原地排序、不稳定排序和旧版 Go 的兼容处理。280 收藏 -
Go HTTP 客户端用 multipart.Writer 同时上传文件和表单字段时,应使用 WriteField 与 CreateFormFile 写入同一个 body,最后 Close 并复用 FormDataContentType 设置请求头。本文给出完整写法、资源关闭顺序和常见排查点。489 收藏 -
用 Go 标准库 http.ServeContent 实现支持 Range 的文件下载接口,理解 200、206、416、If-Range 与 io.ReadSeeker 的边界。260 收藏 -
Go 的 encoding/csv 负责 CSV 字段和缓冲写入,但不会自动添加 UTF-8 BOM。本文说明如何在创建 csv.Writer 前写入 BOM,并正确处理 Flush、Error、CRLF 和 Excel 导入编码选择,解决中文 CSV 直接打开乱码问题。124 收藏 -
Go 正则表达式可以用 (?P...) 声明命名捕获组,再通过 FindStringSubmatch 和 SubexpIndex 按字段名读取结果。本文说明数字分组的错位风险、命名分组写法,以及 nil、空分组和名称不存在时的处理方式。 434 收藏 -
Go 的 string 下标按 UTF-8 字节计算,直接截取中文可能产生乱码。本文用 []rune、range 和 unicode/utf8 说明安全的按字符截取、计数与非法编码处理方式。240 收藏 -
Go benchmark 统计内存分配次数,最直接的方法是 go test -benchmem 或 b.ReportAllocs();需要代码读取时再使用 BenchmarkResult.AllocsPerOp 或 AllocsPerRun。219 收藏 -
Go 表驱动测试中,把资源创建放进 t.Run,临时目录交给 t.TempDir,其他连接和文件用 t.Cleanup 注册回收,就能隔离用例并正确处理失败、跳过和并行子测试。233 收藏 -
Go slog 统一记录请求 ID 和业务字段的实战方法:用 context 传递请求范围数据,用 Logger.With 和 WithGroup 分层复用稳定字段,并通过 InfoContext、LogAttrs 保持日志可检索且不串请求。337 收藏 -
用 atomic.Value 保存不可变配置快照,让热更新线程整份替换配置,并发请求只读当前快照,避开半更新状态与类型不一致 panic。110 收藏 -
Go 解析 JSON 大整数时,map[string]any 默认会把数字放入 float64,可能改写末尾精度。本文比较结构体整数、json.Decoder.UseNumber 和字符串三种方案,帮助你按数据结构与运算需求选择正确做法。391 收藏 -
Go 标准库 flag.FlagSet 可以为每个子命令建立独立的参数集合。本文用 serve 和 check 示例说明命令分发、参数解析、位置参数校验及错误边界。201 收藏 -
Go 调用外部程序时,使用 Cmd.Stdout 和 Cmd.Stderr 可分别接收标准输出与标准错误;大输出或实时日志则用两条管道并行读取,并在读取完成后调用 Wait。262 收藏