Go问答技术文章
-
Go 的 omitempty 在 encoding/json v1 中不会把值结构体当作空值。本文拆解零值判定规则,并对比指针、omitzero、IsZero 与自定义编码方案。189 收藏 -
Go TLS 客户端默认使用主机信任根,不会凭空信任自签名根证书。本文解释 RootCAs 的来源,并给出保留系统根证书、追加私有根证书的安全写法。189 收藏 -
Go errors.Is 判断包装错误不生效时,优先检查 %w 是否保留错误链、哨兵错误是否复用,以及自定义 Is 是否只做稳定的浅匹配。189 收藏 -
goroutine 返回不会自动通知其他等待者。本文对比 close(done)、sync.Cond.Broadcast 和 sync.WaitGroup,说明如何发布终态、保护共享状态并避免等待者永久阻塞。188 收藏 -
解释 Go archive/tar 中 PAX 扩展记录的合并和写入优先级,定位 Header 重建导致的字段丢失,并给出可复查的保留写法。188 收藏 -
Golang · Go问答 | 2星期前 | 连接池 · 性能排查 · Go问答 · net/http Go HTTP/2 MaxConcurrentStreams StrictMaxConcurrentRequests 请求排队
Go HTTP/2 请求排队通常是单连接活动流达到对端配额,但也可能来自业务信号量或流控。本文说明如何定位等待位置,并联合调整服务端流上限、客户端连接策略和下游并发保护。188 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · 错误处理 · Go问答 · Go MIME Content-Type charset boundary mime.ParseMediaType 参数键
Go mime.ParseMediaType 会把媒体类型和参数键规范化为小写,但参数值保留原大小写。本文说明 charset、boundary 的读取方式、错误边界,以及 FormatMediaType 的往返注意点。188 收藏 -
Go HTTP 服务的 ReadHeaderTimeout 限制请求头读取,ReadTimeout 限制整个请求读取。本文说明零值回退与配置迁移,给出服务示例及日志定位方法,区分读取失败与业务耗时。188 收藏 -
Webhook 只校验 HMAC 签名还不够,攻击者仍可能重放一条合法请求。本文用时间戳限制有效窗口,用 nonce 做短期去重,并明确原始请求体、密钥轮换、幂等写入和审计日志的边界,给出 Go 服务可以落地的验签流程。187 收藏 -
Go 的 slices.Collect 能把 iter.Seq 惰性序列一次收成切片。本文用分页数据和空输入例子说明 iter.Seq、slices.Collect、append 之间的关系,以及无法预估长度时的容量取舍。187 收藏 -
Go 泛型值不能直接写 v.(type),因为类型参数不是接口类型。先转换为 any 再做 type switch;若要匹配当前类型参数,可在接口表达式上使用 case T,并注意实例化后的分支重复。187 收藏 -
Go embed 遇到多个目录中的同名文件时,通常不是文件名本身冲突,而是嵌入路径和变量类型用错。本文用 embed.FS、完整路径和构建清单说明如何稳定处理。187 收藏 -
Go读取ZIP时,不能把压缩包内的Name直接拼接到输出目录。本文用archive/zip、path.Clean和filepath.IsLocal组合校验相对路径,说明ErrInsecurePath、反斜杠、盘符与目录条目的处理边界。187 收藏 -
binary.Varint 的第二个返回值小于零表示 64 位溢出,绝对值是已读取字节数。本文拆解三态返回、缓冲区推进、ReadVarint 选择与边界测试。187 收藏 -
Go x509.Certificate.VerifyHostname 忽略旧版 Common Name,是因为主机名校验应使用证书的 SAN。本文区分 DNS SAN、IP SAN 与证书链校验,并给出迁移和排查清单。186 收藏