Go语言技术文章
-
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 收藏 -
Go 先用 filepath.EvalSymlinks 检查,再调用 os.Open,仍可能因检查与使用之间的 TOCTOU 竞态打开意外文件。本文区分 IsLocal、EvalSymlinks 与目录根约束,并给出 Go 1.24+ 的 os.OpenInRoot、os.Root 迁移写法。124 收藏 -
Go os.RemoveAll 删除只读目录失败时,先判断错误来自文件本身、父目录权限还是平台差异,再决定是否受限修复权限并重试。本文给出安全边界、错误分类和可复用的 Go 处理示例。421 收藏 -
Go 的 os.CreateTemp 和 os.MkdirTemp 只负责创建资源,不会替调用方自动删除。本文从正常路径、错误路径和长时间运行服务三个场景说明如何用 defer 绑定清理责任,避免临时目录持续增长。180 收藏 -
Go 的 os.OpenFile 传入 0666 后,新文件可能显示为 0644,原因通常是 Unix-like 系统的 umask 按位屏蔽了权限。本文结合 O_CREATE、O_TRUNC、默认 ACL 和跨平台边界说明如何排查。388 收藏 -
Go WebSocket 关闭码应按所选库从读循环错误中提取。本文用 Gorilla CloseError 展示 Code 与 Text 的读取方式,说明 1005、1006、本地主动关闭和握手 HTTP 状态的区别。147 收藏 -
Go 反向代理中 Host 变了,通常不是请求丢失,而是 Request.Host、URL.Host 与 ProxyRequest.SetURL 的职责不同。本文结合 ReverseProxy 的 Rewrite 写法,说明如何保留入口 Host、设置上游 Host,并排查代理链中的字段来源。494 收藏