Go问答技术文章
-
Go 客户端偶发 EOF 时,先区分响应头已收到但响应体中途断开,还是请求阶段根本没有建立完整响应,再结合已读字节、Content-Length、请求标识和服务端日志判断是否为服务端提前关闭,最后只对可安全重建的幂等请求有限重试。200 收藏 -
Go 使用 archive/tar 解包时,权限差异常常不是 Header.Mode 丢失,而是创建权限受到 umask 影响或目录没有显式 Chmod。本文按普通文件、目录和特殊条目拆开处理,给出一套可复用的还原思路。200 收藏 -
httptest 的 Host 与普通 Header、URL.Host 并非同一字段。本文解释路径请求的默认主机,给出表驱动 Handler 测试和本地 HTTP 往返写法,并说明端口与 TLS 的边界。200 收藏 -
Go OpenFile 追加写仍覆盖文件,通常不是 Write 本身失效,而是 flags 中混入 O_TRUNC、实际使用了 os.Create,或每次循环重新打开文件。本文按现象排查 flags、打开生命周期、Seek 与 WriteAt,给出可直接改造的追加写法。200 收藏 -
Go oggvorbis 可以从任意 io.Reader 解码,但 Length、Position 和 SetPosition 依赖底层 io.Seeker。本文对比流式输入与可定位输入,解释 Read 返回值、样本单位和 ReadAll 的内存边界。200 收藏 -
KSUID默认生成方式使用秒级时间戳,同秒排序由随机载荷决定。本文用确定性构造解释比较结果,给出独立业务序号的排序示例,并说明游标兼容、时钟与Sequence的适用边界。200 收藏 -
Go roaring 默认使用无符号32位整数,roaring64 提供64位扩展。本文从编号范围、跨语言格式、序列化和接口边界比较两者,给出实际选型规则。200 收藏 -
strconv.ParseInt 不返回空数值。本文解释语法错误、越界和零值的区别,用 Go 状态模型保留输入原文,并处理表单空态、错误提示与固定整数范围。200 收藏 -
Go encoding/csv 的 Write 主要负责把记录编码到缓冲区,Flush 才尝试把缓冲数据交给底层 io.Writer;因此导出结束后还必须检查 Writer.Error,才能发现刷新阶段才暴露的写入失败。本文按 Write、Flush、Error 的顺序给出稳妥写法。200 收藏 -
Go反射IsNil只能用于特定Kind。通过状态分类和接口层次示例,区分无效Value、nil指针、普通零值与空切片,避免通用判空逻辑触发panic或误判。200 收藏 -
Go 中 json.Valid 通过并不代表 json.Unmarshal 一定成功。本文从语法有效、目标类型匹配和目标参数合法三个层次,说明如何用错误类型、字段路径和偏移量定位解码失败。199 收藏 -
Go 正则遇到非法 UTF-8 字节时不会自动报错,而是按 utf8.RuneError 解释输入。本文从匹配现象、编码策略和字节索引三个边界说明如何定位问题,并给出严格拒绝与规范化的 Go 写法。199 收藏 -
Go charmap 的 DecodeByte 面向 8-bit 单字节字符集,逐个 byte 查表即可;本文说明它与 NewDecoder、多字节编码和 UTF-8 处理的边界。199 收藏 -
Squirrel 将 []byte 视为单个数据库参数,而 byte 是 uint8 的别名,因此 []uint8 也不会自动展开为 IN。通过二进制值与数字集合示例,说明显式转换、空集合和参数绑定的边界。199 收藏 -
解释 Go adler32.New 返回的 hash.Hash32 如何通过 Sum 追加 4 字节摘要,为什么传入切片的前缀会保留,以及 Checksum、Sum32 和 Sum 的选择边界。199 收藏