Go语言技术文章
-
Go 服务读取 HTTP 响应时,io.ReadAll 会把内容一次性放进内存。本文用 io.LimitReader 和 http.MaxBytesReader 拆开客户端、服务端的上限策略,并说明如何区分截断与真实读取错误。220 收藏 -
用 Go 的 os.OpenFile 创建一次性文件时,O_CREATE 只负责允许创建,O_EXCL 才把已存在检查与创建绑定成一次原子操作。本文用并发示例拆开两种标志的边界,并给出可验证的错误处理方式。413 收藏 -
slices.Collect 能把 iter.Seq 变成切片,但空序列的结果、容量预估和重复遍历边界容易被忽略。本文用最小代码拆开收集过程,并给出选择容量策略的判断方法。236 收藏 -
Go 的 bytes.Buffer.AvailableBuffer 返回可借用的尾部空间,但它不是已经写入的数据。本文用最小程序说明 Bytes、AvailableBuffer、Write 与 Reset 的边界,避免把缓冲容量误当成有效长度。312 收藏 -
time.Duration.String 会自动选择合适单位,但负值、纳秒尾数和日志截断常让排查结果失真。本文用可复现实例说明 String 与 Truncate 的边界。110 收藏 -
Golang · Go教程 | 1星期前 | 标准库 · golang · 性能优化 · bytes.Buffer · 切片边界 · Go bytes.Buffer 切片容量 AvailableBuffer 零分配
bytes.Buffer.AvailableBuffer 可以把格式化结果直接追加到缓冲区的可用容量中,但返回切片只适合紧接着传给同一个 Buffer 的 Write。本文用循环拼接日志的例子说明 Len、Cap、Available 与下一次写入之间的边界,以及什么时候不该保存这段切片。292 收藏 -
Golang · Go问答 | 1星期前 | net/http · Go问答 · HTTP响应 · 连接控制 · Go FLUSH http.ResponseController Hijack ErrNotSupported
http.ResponseController 把 HTTP 响应刷新和连接劫持能力统一到一组探测方法中。本文用真实 Handler 场景拆开 Flush、Hijack 与 ErrNotSupported 的调用边界,说明什么时候应当回退,以及如何验证响应状态。430 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · golang · 排序 · Slices · Go 比较函数 slices.SortFunc slices.SortStableFunc 排序不稳定
slices.SortFunc 排序结果看似不稳定,通常不是算法随机,而是比较函数没有满足严格弱序,或调用方把等价元素的原顺序当成了保证。本文用订单优先级示例拆开 cmp 的返回值、重复元素处理和需要稳定排序的边界。223 收藏 -
slices.DeleteFunc 适合按条件批量删除切片元素,但回调遍历的是原切片语义,不能在回调里再改同一个切片。本文用可运行示例拆开保序删除、索引变化和尾部清零带来的内存边界,并给出何时改用一次性筛选。285 收藏 -
encoding/base64 的 AppendEncode 会把编码结果追加到已有切片,适合复用缓冲区。本文通过可运行示例说明输出容量、尾部数据和 RawStdEncoding 的边界。486 收藏 -
从配置校验场景出发,拆开 nil 接口、typed nil 和 reflect.Value.IsZero 的差异,并用可运行的 Go 示例给出安全的判断边界。382 收藏 -
Golang · Go问答 | 1星期前 | 反射 · 数据结构 · 标准库 · golang · Go reflect.StructOf 动态结构体 reflect.StructField StructTag
reflect.StructOf 可以根据 reflect.StructField 列表拼出运行时结构体类型,适合字段集合由配置决定的场景。本文用一个可运行示例说明字段标签如何读取、为什么未导出字段会触发限制,以及如何缓存字段描述而不是反复创建类型。277 收藏 -
Golang · Go教程 | 1星期前 | 错误处理 · go · 模板 · 后端开发 · 渲染 · Go Template html/template text/template 模板运行 missingkey
Go 模板渲染可选片段时,字段缺失不一定会立刻报错。本文用 text/template 的模板运行、Option("missingkey=error") 和显式分支拆开默认行为、严格校验与可选字段的边界,给出可直接运行的处理方式。177 收藏 -
Golang · Go问答 | 1星期前 | 并发 · 标准库 · go · 泛型 · unique · Go unique.Make unique.Handle Handle.Value 值身份 可比类型
Go unique.Make 为可比较值建立可比较的 Handle 身份。本文用一个小型标签池示例说明 Handle 相等、Value 浅拷贝、不可比较类型限制和进程结束后的生命周期边界。203 收藏 -
Go 的 iter.Pull 把 push 风格的 iter.Seq 转成 next 和 stop 两个函数,适合需要逐个取值的场景。本文用可运行示例说明 next 的结束信号、提前停止时 defer stop 的必要性,以及不能并发调用 next 和 stop 的边界。462 收藏