Go教程技术文章
-
Go 的 testing.T.Context 返回一个会在清理函数执行前取消的上下文。把它传给数据库、HTTP 或后台 goroutine,可以让测试超时和资源清理形成可观察的闭环。本文用一个可运行的测试示例说明取消链、Cleanup 顺序和失败定位边界。294 收藏 -
Go 1.25 中可以用 runtime/debug.SetCrashOutput 把未处理 panic 和致命错误追加写入单独文件。本文用一个可运行的崩溃留证流程,说明文件轮转、监控进程接收和恢复边界。216 收藏 -
Go 1.25 让 Linux 容器中的默认 GOMAXPROCS 感知 cgroup CPU 配额,并提供 runtime.SetDefaultGOMAXPROCS 重新启用默认值。本文从升级风险、代码改动和验收证据三方面给出迁移清单。394 收藏 -
把多项错误拼成字符串会丢掉可判断的错误链。本文以校验、写盘和关闭资源为例,演示如何迁移到 errors.Join,保留 errors.Is 判断能力,并处理 nil、重复错误与 errors.Unwrap 的边界。316 收藏 -
encoding/hex.AppendEncode 适合把字节编码结果追加到已有缓冲区。本文用 EncodedLen 判断容量,拆开 dst[:0] 复用、尾部追加和切片边界,避免预留不足或误把编码结果当原始字节。456 收藏 -
Go 中 bytes.Buffer 适合逐步写入并把内容交给下游读取,bytes.Reader 适合只读字节切片、定位游标和重复读取。本文用一个小实验拆开两者的状态变化与选择边界。279 收藏 -
Go 的 encoding/binary.NativeEndian 适合读取本机格式,但不应直接替代协议字节序。本文用一个二进制记录示例拆开 NativeEndian、unsafe 转换和跨机器可移植编码的边界。267 收藏 -
处理 multipart/form-data 时,不必把上传文件全部读入内存。本文用 NextPart 与 NextRawPart 展示如何按字段读取、跳过文件内容,并说明文件名解码和边界错误的判断方法。210 收藏 -
Go 1.23 为 math/rand/v2.ChaCha8 增加了 Read 方法,适合从独立的确定性随机源批量取字节。本文从 NewChaCha8、Read、Uint64 交错调用和 Seed 重置入手,排查为什么同一道测试会出现不同字节序列,并给出并发隔离的写法。122 收藏 -
用 net/http/httptrace 把一次 Go HTTP 请求拆成 DNS、连接、TLS、写请求和首字节等阶段,判断慢点究竟发生在哪里。372 收藏 -
Golang · Go教程 | 5天前 | sync · golang · 文件操作 · Close · os.File · 错误处理 数据持久化 文件落盘 Go os.File.Sync Go Close
Go 文件写入后为什么还要区分 Sync 和 Close?本文从 Write、Sync、Close 的调用链出发,说明落盘确认、defer 顺序与错误返回值该怎么处理。168 收藏 -
bytes.Buffer.Bytes 返回的是缓冲区底层数据切片,不是独立副本。本文用复用、Reset 和 copy 三个边界说明什么时候可以读取,什么时候必须先复制。371 收藏 -
用 netip.ParseAddrPort 统一校验 host:port 输入,拆开 IPv4、IPv6 方括号、缺失端口和端口越界等边界,并给出可复用的 Go 代码。310 收藏 -
io.LimitedReader 用 N 限制读取量,但读满上限不等于底层输入结束。本文用剩余字节、EOF 与下一次读取拆开判断,给出处理固定长度帧和保留尾部数据的 Go 写法。363 收藏 -
Golang · Go教程 | 5天前 | sync · WaitGroup · 并发编程 · Go教程 · 工程实践 · Go 并发任务 错误传播 sync.WaitGroup.Go WaitGroup.Add
Go 1.25 新增的 sync.WaitGroup.Go 能把启动任务、计数和收尾绑定在一起,但它不负责错误返回,也不能让任务函数 panic。本文从 Add 竞态与错误传播两个现场,给出可核对的写法和验收边界。458 收藏