Go语言技术文章
-
Go 服务接入 OpenTelemetry 后,如果 Trace 仍然无法显示清晰的调用关系,通常要从 service.name、HTTP 入出站埋点、上下文传播和批量导出四个边界排查。本文给出一套原创接入思路。335 收藏 -
Go 1.27 泛型方法调用无法推断类型参数时,先核对工具链,再检查普通参数和回调是否提供足够证据,并用显式类型实参区分推断失败、约束不匹配、方法表达式和接口边界问题。335 收藏 -
以带计时器资源的 iter.Seq2 为例,说明 Pull2 的 next、stop、生产者 defer 和提前退出如何配合,给出可迁移的资源释放模板。333 收藏 -
Go 的 float64 虽然能作为 map 键,但 NaN 与自身也不相等,导致查找和 delete 无法重新命中已写入条目。本文演示问题,并给出入口拦截、clear、过滤重建和稳定键编码方案。332 收藏 -
Go reflect.VisibleFields 会按 FieldByName 的可见性处理嵌入字段:浅层同名字段覆盖深层字段,同层同名字段互相抵消。本文用结构体示例说明冲突判断、StructField.Index 读取路径和 nil 嵌入指针边界。332 收藏 -
Go 内部 HTTPS 服务使用自建 CA 时,不要把 InsecureSkipVerify 设为 true。本文用 SystemCertPool 与 AppendCertsFromPEM 合并信任根,配置 RootCAs,保留主机名校验,并整理证书 SAN、PEM 解析和部署路径的排查边界。332 收藏 -
本文用 Go 1.27 实验性 simd 包实现 float32 最小—最大归一化:标量求 min/max,向量完成减法与除法,并处理尾部、常量数组和 NaN。332 收藏 -
Go 上传接口不能只调用 FormFile。本文用 MaxBytesReader 限制完整请求体,用 ParseMultipartForm 控制内存阈值,并通过 MultipartForm.RemoveAll、随机落盘名和失败回滚正确清理临时文件。331 收藏 -
围绕 Go //go:embed 资源更新后仍读到旧内容的问题,区分匹配模式、构建缓存、旧进程、模块来源与容器构建上下文,并给出最小排查命令。331 收藏 -
Go 处理外部文件名时,filepath.Join 不能单独构成目录访问边界。本文结合 os.OpenInRoot 和 os.Root,说明固定目录、相对路径、符号链接、Root 生命周期以及平台限制应该怎样设计。331 收藏 -
Go 的 io.Reader 可以在一次 Read 中同时返回 n > 0 和 io.EOF。正确顺序是先处理 buf[:n],再判断 err;否则会丢掉输入流最后一段有效数据。本文给出通用循环、错误优先级、0,nil 边界与标准库替代方案。330 收藏 -
反向代理要控制上游协议,关键是给 ReverseProxy 配置自定义 Transport.Protocols,而不是只修改入口 Server.Protocols。本文用 Go 代码说明 HTTP/1、TLS HTTP/2、明文 HTTP/2 的选择、回滚与排查边界。330 收藏 -
filepath.Clean 只处理路径字符串,不解析软链接、权限和真实文件系统状态。本文按路径生命周期解释 os.Root 仍会拒绝访问的原因,并给出可移植的校验与错误处理写法。329 收藏 -
Go 1.24 为 crypto/x509 增加证书策略验证后,证书链能建立并不代表满足指定策略 OID。本文从版本、Policies 字段、CertificatePolicies、策略图和中间证书集合五个方面定位失败原因。329 收藏 -
Go 业务超时应优先使用 time.Now 保留的单调时间语义,日志和跨服务协议则使用墙上时间或剩余 Duration。本文拆解校时影响、API 选择、序列化边界和 RPC deadline 的决策方法。328 收藏