Go语言技术文章
-
用 Go 的 io.TeeReader 把请求体读取和 SHA-256 摘要计算接在同一条流上,说明 io.Copy、Sum 调用时机,以及绕过包装 Reader 时的常见错误。476 收藏 -
Go 的 io.ReadFull 读取固定长度数据时,EOF 表示一个字节都没读到,UnexpectedEOF 表示已读到部分数据后提前结束。本文用 n 和 err 设计可靠的错误分支,并说明如何放进固定长度协议解析。476 收藏 -
Go 的 slices.SortStableFunc 会在比较结果相等时保留原顺序,适合按单一字段排序又要维护同组先后关系的场景。本文用订单优先级示例拆解比较函数、稳定性和空切片边界。476 收藏 -
Go 1.26 放宽了 new 的参数限制,可以直接用 new(expr) 创建带初始值的指针。本文用可选字段、版本门槛和迁移验证说明它解决什么问题,以及什么时候不该急着改写。476 收藏 -
泛型类型上的方法一旦使用指针接收者,值类型和指针类型就拥有不同的方法集。本文用编译期断言拆解 Box[T]、*Box[T] 与接口的匹配关系,并补充 Go 1.27 泛型方法不能直接实现接口方法的边界。475 收藏 -
Go 的 httptrace.ClientTrace.Got1xxResponse 用来观察最终响应前的每条 1xx informational response。本文从 Got100Continue 迁移到通用回调,说明 code、MIMEHeader、错误终止和回调并发边界。475 收藏 -
Go types.SizesFor 返回 nil 通常不是类型没有大小,而是 compiler 与 arch 组合未知。本文区分 GOOS、GOARCH 与编译器参数,说明 Config.Sizes 的默认路径,并给出显式处理 nil、区分 Sizeof 负数的实战写法。475 收藏 -
Go 嵌入类型出现同名方法时,提升方法会因选择器歧义而不进入 go/types.MethodSet。本文用最小示例说明嵌入深度、显式调用和静态分析中的修复边界。475 收藏 -
用 AppendFormat 直接向字节缓冲追加时间,结合日志批次说明容量复用、返回值、写入错误及同步与异步消费的所有权边界。475 收藏 -
Go go toolchain 配置没有生效时,先检查当前目录、GOTOOLCHAIN 来源以及 go.mod、go.work 的 go/toolchain 行,再按优先级清理覆盖配置。本文给出一套从现象到最小确认的排查顺序。475 收藏 -
从字段缺失、零字节文件、读取游标和写入失败区分Go multipart上传为空的原因,给出FormData最小提交和本机临时落盘诊断代码,比较解析大小与复制字节数。475 收藏 -
Go 服务端可以在 ClientHelloInfo.SupportedVersions 中读取客户端声明支持的 TLS 版本,但它不是最终协商结果。本文说明回调读取、TLS 1.2 以下版本的推导边界、服务端 MinVersion/MaxVersion 的交集判断,以及握手完成后用 ConnectionState.Version 确认最终版本。475 收藏 -
Go runtime/metrics 的 Sample.Value 不能直接按一种数值类型读取,应先用 Kind 判断 KindBad、KindUint64、KindFloat64 或 KindFloat64Histogram,再调用对应方法。本文说明类型分派、未知指标处理和复用采样切片时的边界。475 收藏 -
Go 循环中直接 defer 会把关闭动作推迟到外层函数返回。本文用逐个处理文件的场景,说明如何缩短 defer 生命周期,并用命名返回值保留 Close 错误。475 收藏 -
Go Decimal 的 DivRound 可以在单次除法调用中指定小数位数。本文用字符串构造 Decimal,说明 precision、正负数舍入、负精度和 StringFixed 展示之间的区别。475 收藏