Go语言技术文章
-
Golang · Go教程 | 1个月前 | 并发 · pprof · 故障排查 · Go教程 · net/http/pprof goroutineleak goroutine 泄漏 runtime/pprof Go 1.27
Go 1.27 将 goroutineleak profile 正式带入 runtime/pprof 和 net/http/pprof。本文从一个被 channel 永久阻塞的最小案例出发,演示如何采样、判断可疑协程,并说明全局变量和可运行协程为什么会造成漏报边界。243 收藏 -
围绕 strings.CutLast 的空分隔符、未命中和末尾分隔符场景,解释 found 返回值与 LastIndex 兼容实现的判断边界。243 收藏 -
Go 的 url.ParseQuery 遇到非法百分号时不会只返回空结果:它仍会给出非 nil 的 Values,保留可解码的查询参数,同时返回首个解码错误。本文拆开这个边界,并给出严格拒绝与安全降级的选择方法。243 收藏 -
自定义 bufio.Scanner 的 SplitFunc 时,最后一个字段没有分隔符很容易被漏掉。本文用逗号分词示例说明 atEOF 与剩余 data 的关系,并给出连续分隔符、空 token 和 ErrFinalToken 的处理边界。243 收藏 -
reflect.StructOf 遇到重复字段名会直接 panic。本文从字段去重、参数边界、局部 recover 和表驱动测试四个方面,给出可诊断的动态结构构造方式。243 收藏 -
Go copy 没有复制出数据,常见原因是目标切片只有 cap 没有 len。本文解释 copy 的复制边界,并给出覆盖、追加和回归检查的正确写法。243 收藏 -
Go 中排查 unicode/utf8 非法序列时,先用 Valid 判断整体字节,再用 RuneError 与 size=1 定位具体偏移,并区分截断、错误编码和真实替换字符。243 收藏 -
Go 中给 TLS 握手设置取消条件,直接把带超时或可取消的 Context 传给 tls.Dialer.DialContext。本文说明它对 TCP 建连和 TLS 握手的覆盖范围、错误判断及连接成功后的读写超时边界。243 收藏 -
Go 泛型函数的约束既要表达可接受的类型,也要让调用方看得懂。本文从类型集、接口方法和类型推断三个边界出发,拆解约束设计、编译验证与常见误区。242 收藏 -
time.Duration 本质是纳秒数量的 int64 别名。参与整数除法时结果会向零截断,先明确单位和余数,再决定是否转换为浮点或保留纳秒精度。242 收藏 -
io.SectionReader 用 Size 报告固定区间长度,用 ReadAt 按区间内偏移读取;分片下载先校验块范围,再把相对偏移交给 ReadAt,才能避免越界和错误重试。242 收藏 -
sync.Pool 适合复用短生命周期对象,但不适合无上限地保留大缓冲区。本文用容量阈值、Put 前清理和堆画像检查,给出一套避免大对象长期留池的 Go 写法。242 收藏 -
Go 的 testing.T.Cleanup 会在当前测试及其子测试完成后调用清理函数,同一测试中多个回调按后注册先执行。本文用子测试示例说明 LIFO 顺序、资源依赖和并发注册边界。242 收藏 -
Go 的 range channel 不会自行判断生产完成,只有通道关闭并读完已发送值后才会结束。本文用发送方、协调者和消费者三种责任划分,说明多生产者安全 close、取消退出以及常见死锁的排查方法。242 收藏 -
围绕 Go encoding/json.Unmarshal 讲清目标类型、UnmarshalJSON、自定义字段转换、别名类型防递归,以及 SyntaxError 和 UnmarshalTypeError 的排查方法。242 收藏