Go语言技术文章
-
Go httputil.ReverseProxy 的 SetURL 会让出站 Host 默认跟随目标主机。本文用 Rewrite 先修改目标 URL,再保留入站 Host,并说明 X-Forwarded-Host、路径拼接与安全边界。401 收藏 -
Go 程序里的相对路径不是相对源码目录,而是相对进程当前工作目录。本文按 os.Getwd、filepath.Abs、显式配置根目录和部署检查清单的顺序,定位 IDE、测试、脚本与服务启动时的路径失效问题。401 收藏 -
Go 中直接比较 error 只检查当前错误值,errors.Is 会沿 Unwrap 错误链寻找匹配。本文用 %w、errors.Join 和自定义 Is 说明三种判断边界。401 收藏 -
Go 的 encoding/csv 会自动忽略完全空行,但不会把只含空格的行当作空行。本文说明 Comment、TrimLeadingSpace 与 FieldsPerRecord 的取舍,并给出带错误处理的读取示例。401 收藏 -
QueryContext 取消后连接不一定立刻回到连接池。本文从 Rows 生命周期、驱动取消能力和 DB.Stats 观测三个角度定位原因,并给出可复用的释放与排查模板。400 收藏 -
go mod tidy 加入看似未使用的模块,通常是因为它会扫描测试、工具、构建标签和跨平台源码。本文用依赖路径、模块图和可回滚命令说明如何判断该模块是否应该保留。400 收藏 -
Golang · Go教程 | 3天前 | CGO · 资源管理 · Go教程 · runtime.KeepAlive runtime/cgo.Handle Go cgo C库句柄 LockOSThread
Go 封装 C 库句柄时,应让一个包装对象独占 C 指针,以显式且幂等的 Close 负责释放,并用互斥锁处理并发访问。若 C API 依赖线程状态,则用锁定 OS 线程的专属 goroutine 承担创建、调用与销毁。本文同时说明 cgo 指针边界、KeepAlive、回调句柄和发布检查。400 收藏 -
Go 源站关闭 HTTP/2 后客户端仍显示 h2,通常是因为客户端看到的是到 CDN、负载均衡或反向代理的前端连接。本文从逐跳协议边界、Server.Protocols 绑定、直连源站与 r.Proto 证据入手,定位真正仍在使用 HTTP/2 的链路。400 收藏 -
同一套 Go 应用需要随不同构建目标携带不同静态资源时,可以让构建标签选择资源入口文件,再由 embed.FS 把选中的目录编进二进制。本文给出默认版与企业版的组织方式,并让业务层保持统一的 fs.FS 接口。400 收藏 -
Go 中把 nil 指针放进接口后,接口本身可能不等于 nil,但方法仍可依据动态类型完成分派。本文用最小示例拆开 nil 接口、typed nil 和 nil 接收者的区别。399 收藏 -
io.LimitReader 返回 EOF 不代表底层 reader 一定结束。本文拆解 LimitedReader 的读取顺序,用字节数判断边界,并给出固定长度读取与额外探测的选择方法。399 收藏 -
解释 Go encoding/xml 的 Token API 为什么会让保存的 xml.CharData 被后续内容覆盖,并给出 CharData.Copy、string 和 CopyToken 的正确选择。399 收藏 -
Go 测试提前 Fatal 时,已注册的 t.Cleanup 仍会在测试边界执行。本文梳理后进先出、父子测试资源归属,以及异步 goroutine 错误回传的安全写法。399 收藏 -
Golang · Go教程 | 2星期前 | 日志 · 标准库 · 编码 · Go教程 · 二进制日志 Go encoding/hex hex.EncodeToString hex.Encode 十六进制编码
Go 中把请求 ID、摘要或协议字段写入日志时,直接输出 []byte 容易出现不可见字符。本文用 encoding/hex 给出可读编码、预分配、解码错误和长度边界的实践清单。399 收藏 -
解释 Go MaxBytesReader 在请求体超限时如何返回 MaxBytesError、通知服务器关闭连接,以及 ResponseWriter 包装和中间件顺序为何会影响该信号。399 收藏