Go语言技术文章
-
Go 泛型代码需要把类型交给反射注册表时,reflect.TypeFor 可以直接取得类型描述;再配合 AssignableTo 校验注册边界,避免用空值和类型断言绕一圈。291 收藏 -
Go 切片 append 后原切片数据也变化,通常是因为新切片仍复用了容量范围内的底层数组。本文用 len、cap 和三切片表达式判断复用边界,并比较 append 隔离与 copy 深度复制的选择。291 收藏 -
Go 从 nil channel 接收不会返回零值,而是永久阻塞。本文通过复现、状态对比和 select 场景,说明如何定位 nil channel,并用初始化、超时或退出信号修复等待无出口问题。291 收藏 -
Go 读取结构体自定义标签时,先通过 reflect.TypeOf 和 Field 拿到 StructField,再用 Tag.Lookup 区分标签缺失与显式空值;Tag.Get 适合只关心字符串的兼容场景,但非约定格式的返回值不应被依赖。291 收藏 -
Go select 同时有多个 case 可以执行时不会按书写顺序固定选择,而是从可执行通信中做均匀伪随机选择。本文说明求值规则、常见误区,以及如何实现尽力或严格优先级。291 收藏 -
讲清 Go encoding/csv 的 FieldsPerRecord 三种模式,说明 ErrFieldCount 返回 record 的处理方式,并给出固定模板、首行推断和变宽 CSV 的错误分流方案。291 收藏 -
Go 的 csv.Reader 默认会用第一条记录的字段数约束后续行,遇到缺列或多列就返回 ErrFieldCount。本文从故障现场、根因和修复动作出发,说明如何允许不定列数,并把缺列、额外列和真正的 CSV 格式错误分开处理。291 收藏 -
Go 的 image.Image 不要求调用方先知道图片一定是 Gray 还是 RGBA。本文从 ColorModel 与 At 出发,说明怎样统一读取像素、处理预乘 alpha,并在确实需要时转换成稳定的 Gray、RGBA 或 NRGBA 类型。291 收藏 -
Go HTTP 服务端客户端断开后仍有工作运行,重点检查 r.Context 是否传到阻塞操作。本文对比 CloseNotifier、Background 与 Request.Context,给出迁移写法、回归边界和异步任务取舍。291 收藏 -
通过包装Go RoundTripper,在独立Header副本中注入Context追踪标识,保留底层响应与错误,并明确并发、Body和重定向目的端的处理边界。291 收藏 -
Go 循环里反复调用 time.After 是否需要改成 Timer?本文按单次超时、可复用等待和固定周期三种工作流给出选择,并说明 Go 1.23 之后的计时器回收与旧版本兼容写法。291 收藏 -
Go crypto/rand 生成的是随机字节,不是随机字符。本文解释直接转 string、十六进制和 Base64 后长度为何不同,并给出带错误处理的固定长度随机字符串写法。291 收藏 -
Go HTTP/2 的 MaxConcurrentStreams 限制的是单条连接的并发流,不是所有连接共享的服务总并发。本文说明 Server.HTTP2 的配置方式、跨连接边界以及上线检查清单。291 收藏 -
Go GOPROXY 返回 404 不一定说明版本写错,也可能是当前代理没有该模块或回退链没有按预期生效。本文按配置、版本列表和代理协议请求逐层判断原因。291 收藏 -
Go regexp.FindStringSubmatch 返回 nil 只表示整体没有匹配;匹配成功但捕获组为空时,切片仍然存在。本文用最小示例区分 nil、空字符串和可选分组,并给出稳定判断写法。290 收藏