Go语言技术文章
-
Go map 执行 clear 后 len 会变成 0,但底层桶、GC 时机和运行时堆复用会让进程内存暂时不降。本文用小实验区分清空、重建和真正释放。343 收藏 -
Go slice 截取不会复制底层数组,只保留很小的子切片时,大数组仍可能被引用。本文用字节片段示例说明原因,并给出 make+copy 与 bytes.Clone 的释放方案。424 收藏 -
Go 的 -race 会在运行时观察并发访问,因此内存和执行时间都会增加。本文拆解开销来源,并给出提交级、合并级和真实负载的测试分层方案。212 收藏 -
CGO_ENABLED=0 会让导入 C 的 Go 文件不参与构建,因此某些依赖会直接失去实现。本文按 cgo 构建约束、CgoFiles、CC 与目标平台四个输入定位原因,再决定使用纯 Go 替代还是补齐 C 编译链。208 收藏 -
Go 的 vendor 模式和模块缓存不是两份等价副本:-mod=vendor 从项目根目录的 vendor 读取,-mod=mod 才会走模块缓存。本文按命令来源、modules.txt、工作区和工具链四个边界定位结果差异。408 收藏 -
Go 私有模块拉取失败时,先让 GOPRIVATE 匹配真实的模块路径前缀,再区分直连 VCS 与私有代理方案。本文说明 GOPRIVATE、GONOPROXY、GONOSUMDB 和 GOPROXY 的关系,并给出不泄露凭据的排查顺序。205 收藏 -
go.sum 被反复改写通常不是随机行为,而是依赖图、Go 工具链、tidy 兼容范围或工作区边界发生了差异。本文给出一套先看差异、再固定环境、最后决定提交的排查方法。443 收藏 -
Go modules 下载依赖超时时,先区分代理、版本库直连和校验服务,再按回退规则切换 GOPROXY,避免把关闭校验当成万能方案。437 收藏 -
Golang · Go问答 | 19小时前 | 标准库 · 错误处理 · Go问答 · Go encoding/hex DecodeString InvalidByteError ErrLength 十六进制解码
Go 的 hex.DecodeString 失败时,先用 ErrLength 区分奇数长度,再用 InvalidByteError 识别非法字符,最后扫描原始输入得到字节偏移,并用脱敏日志保留可操作的排障信息。282 收藏 -
Go 路径在 Windows 正常、Linux 失效,通常是把反斜杠写死在字符串里。本文解释 filepath.Join、FromSlash、ToSlash 与 path.Join 的边界,帮助你区分本地文件路径、可移植路径和 URL 路径。246 收藏 -
Go 里 os.Open 返回成功并不代表后续 File.Read 一定成功。本文按 Open、Read、Close 三个阶段拆开权限错误,使用 PathError、errors.Is 和 os.IsPermission 定位真正失败的操作,并给出不会覆盖主错误的写法。350 收藏 -
Go Unix socket 连接失败应先区分路径不存在、权限拒绝和连接拒绝。在 Linux 路径型 socket 中,按客户端身份检查父目录搜索权限、socket 写权限、监听状态与挂载视图,并将最小访问范围固化到服务创建与重启流程。289 收藏 -
Go 处理 IPv6 地址和端口时,冒号会让普通 host:port 拼接失去边界。本文从裸 IPv6、重复方括号、net.JoinHostPort、net.SplitHostPort 和 zone 标识几个角度,给出定位解析失败与统一拼接的实用方法。310 收藏 -
从 DNS 解析与 TCP/TLS 建连的分层排查开始,使用 net.Resolver 配置自定义 DNS 连接,并把它接入 http.Transport。219 收藏 -
Go TLS 握手失败时,先用显式握手固定错误阶段,再沿错误链识别证书校验问题,并核对 MinVersion、MaxVersion 与最终 ConnectionState.Version,从而区分身份校验失败和协议版本不兼容。284 收藏