Go问答技术文章
-
Go os.Lstat 报错时,用 errors.Is 区分不存在、权限不足等原因,用 errors.As 提取 PathError 上下文。结合原创清单工具说明错误链包装、符号链接语义与未知错误的保留方式。275 收藏 -
Go 测试辅助函数不必手动拼接父子测试名称,传入 *testing.T 后调用 t.Name() 即可获取当前测试或子测试的完整名称。本文说明表驱动测试、t.Helper 配合方式,以及名称作为诊断信息时的边界。177 收藏 -
从字段缺失、零字节文件、读取游标和写入失败区分Go multipart上传为空的原因,给出FormData最小提交和本机临时落盘诊断代码,比较解析大小与复制字节数。475 收藏 -
Go 升级后 gofmt 可能因为格式规则或实现调整产生少量空白差异。本文用变化文件数、diff 行数和工具链版本定位原因,再通过 go.mod、toolchain 与 CI 固定格式化环境。116 收藏 -
netip.ParseAddr 只解析 IP 地址,因此会拒绝带端口的完整端点。需要处理 host:port 时应改用 ParseAddrPort;IPv6 端点要写成 [地址]:端口,端口必须是数字。本文还说明 AddrPortFrom、区域标识、端口 0 和 MustParse 的适用边界。501 收藏 -
Go 的 math/big.Int 表示整数,调用 Quo 时会按整数除法截断,因此 5 除以 2 得到 2。需要保留小数时,应把输入放进 big.Rat,再用 Quo、RatString 或 FloatString 输出。本文同时说明 QuoRem、IsInt、除数为零和负数边界。384 收藏 -
Go 按字节截断可能拆开 UTF-8 编码。本文比较完整字节前缀与 rune 前缀,提供严格输入的原创函数,并说明替换字符、流式尾部和字素簇的判断边界。348 收藏 -
Go SMTP 返回 535 时,不要只看错误码猜原因。本文用 net/smtp 的 Auth、Mail、Rcpt 阶段区分账号认证失败与信封发件人被策略拒绝,并给出保留 SMTP Code 和 Msg 的排障写法。445 收藏 -
Go 事务 Commit 返回成功后仍读取不到刚写入的数据,通常要先检查提交错误、查询条件、Tx 与 DB 是否混用,以及是否读到了延迟副本。本文按 database/sql 的事务边界给出排查与实现方式。146 收藏 -
Go 数据库连接池空闲连接断开,可能来自 sql.DB 主动回收,也可能是数据库、代理或 NAT 的空闲超时。本文按时间线区分原因,说明连接池参数职责,并给出带边界的排查与配置方案。198 收藏 -
Go database/sql 不能把 SQL NULL 直接扫描到 string。本文说明 NULL、空字符串和默认文本的区别,并比较 sql.NullString、*string 与 COALESCE 的适用边界。130 收藏 -
Go reflect 查到未导出字段不代表能调用 Interface 或 Set。本文区分字段存在、导出、可寻址与可修改,给出返回明确错误的读取示例及公开接口替代方案。456 收藏 -
Go reflect 修改字段时 CanSet 为 false,通常是反射值不可寻址、忘记从指针 Elem,或字段未导出。本文用结构体和 map 对照示例说明安全赋值路径与排查边界。284 收藏 -
Go html/template 输出和预期不同,通常不是数据丢失,而是模板根据 HTML、属性或 URL 上下文自动转义。本文用最小示例区分纯文本、可信 HTML 和不安全 URL,给出不绕过安全保护的排查与修复方法。108 收藏 -
Go tar 解包应分别处理条目名与链接目标。本文采用默认拒绝链接的严格策略,用 os.Root 与私有暂存目录限制实际写入,并说明词法检查、平台差异及资源预算边界。411 收藏