Go问答技术文章
-
Go crypto/rand 生成的是随机字节,不是随机字符。本文解释直接转 string、十六进制和 Base64 后长度为何不同,并给出带错误处理的固定长度随机字符串写法。291 收藏 -
Go HTTP/2 的 MaxConcurrentStreams 限制的是单条连接的并发流,不是所有连接共享的服务总并发。本文说明 Server.HTTP2 的配置方式、跨连接边界以及上线检查清单。291 收藏 -
Go GOPROXY 返回 404 不一定说明版本写错,也可能是当前代理没有该模块或回退链没有按预期生效。本文按配置、版本列表和代理协议请求逐层判断原因。291 收藏 -
Go x/net/proxy.FromEnvironment 默认把 Direct 作为底层拨号器。本文拆开环境代理、NO_PROXY 与 forward 的关系,说明为什么需要 FromEnvironmentUsing 传入带超时、绑定参数或测试替身的备用拨号器。291 收藏 -
围绕 io.CopyBuffer 复制大文件时的额外分配与空结果现象,拆解 nil 缓冲区、WriterTo/ReaderFrom 快速路径、目标扩容、written 与 err 的判断,以及并发复用缓冲区的生命周期边界。291 收藏 -
Connect Go 的 connectinprocess transport 可以把 RPC 直接分派到同进程的 connect.Server,不监听端口也能覆盖客户端、服务端拦截器、请求响应复制和错误语义。本文给出测试构造方式,并说明流式背压和仍需真实 HTTP 测试的边界。291 收藏 -
Go 模块拆分后出现 ambiguous import,通常是父模块和拆分子模块同时提供同一个包路径。本文用模块图、版本配套升级与 replace 过渡说明迁移处理方式。290 收藏 -
Go HTTP 客户端重试后请求体变空,通常不是服务端随机丢数据,而是复用了已经读过的 Body。本文用 GetBody 和字节快照定位并修复请求体重放问题。290 收藏 -
Go 下载依赖卡在 sum.golang.org 时,先区分模块代理和校验数据库的网络边界,再按公共模块、私有模块或内网代理选择 GOPROXY、GOSUMDB、GOPRIVATE 与 GONOSUMDB,避免用全局关闭校验掩盖配置问题。290 收藏 -
Go context.WithValue 取不到值,通常不是 Context 自己丢了数据,而是写入和读取使用了不同的键类型、键值或 Context,或者取值后的类型断言不匹配。本文按这四个边界给出排查与封装方法。290 收藏 -
Go Unix socket 连接失败应先区分路径不存在、权限拒绝和连接拒绝。在 Linux 路径型 socket 中,按客户端身份检查父目录搜索权限、socket 写权限、监听状态与挂载视图,并将最小访问范围固化到服务创建与重启流程。289 收藏 -
Go 服务出现请求卡住时,可以用 runtime/pprof 的 goroutine profile 导出当前所有 goroutine 堆栈。本文对比 HTTP 端点和信号触发两种方式,并说明怎样从等待状态与重复栈定位问题。289 收藏 -
Go defer 写在循环里时,文件通常不会在每轮结束后马上关闭。本文解释 defer 的函数级生命周期,并对比局部函数封装与显式 Close 两种修正方式。289 收藏 -
Go slice append 后原切片内容被覆盖,通常是因为派生切片与原切片共享底层数组且仍有备用容量。本文用最小示例说明 len、cap、三下标切片与 copy 的选择边界。289 收藏 -
Go 1.27 修复了 gofmt 的列对齐判断,少量旧文件重新格式化时可能出现空格变化。本文说明如何固定 Go 工具链、审阅纯格式化 diff,并把检查接入 CI。288 收藏