Go语言技术文章
-
在 32 位 ARM、386 或 32 位 MIPS 上使用 64 位原子量时,旧式 sync/atomic 函数要求调用方保证对齐。本文解释结构体字段布局风险,并给出迁移 atomic.Int64、保留旧 API 和构建检查的做法。445 收藏 -
Go 项目在本地用 replace 指向兄弟目录时,开发机可能因为目录和 go.work 存在而编译通过,CI 却在依赖解析阶段失败。本文解释相对路径、require、go.work 与 GOWORK=off 的边界,并给出从本地联调迁移到正式模块版本的做法。445 收藏 -
Go 请求超时后仍看到底层连接,通常不是 context.WithTimeout 失效,而是请求上下文、Transport、连接池和服务端属于不同生命周期。本文给出完整的取消链路、Transport 排查方法和连接状态判断清单。445 收藏 -
使用 Go groot 打开 ROOT 文件后,遍历 File.Keys() 列出对象键,并读取名称、类名、标题和 cycle。本文还说明对象键与对象内容的区别、Get 的使用边界,以及嵌套目录和异常文件的处理方式。445 收藏 -
Go SMTP 返回 535 时,不要只看错误码猜原因。本文用 net/smtp 的 Auth、Mail、Rcpt 阶段区分账号认证失败与信封发件人被策略拒绝,并给出保留 SMTP Code 和 Msg 的排障写法。445 收藏 -
Go 连续读取多个 PEM 块时,第二段找不到往往不是证书不存在,而是没有继续消费 pem.Decode 返回的 rest,或忽略了 PEM 必须从行首开始、在行尾结束的格式要求。445 收藏 -
Go 类型分析工具拿到 *types.Selection 后,可以用 types.SelectionString 统一生成字段或方法选择字符串,并通过 Qualifier 控制接收者类型中的包名显示。本文给出从 types.Info.Selections 取值、编写包名限定函数和处理嵌入字段的完整写法。445 收藏 -
Go AST 删除或替换节点后,原来的注释不会因为切片变化自动重新归属。本文用 ast.CommentMap 说明 NewCommentMap、Filter 和 Update 的配合方式,避免源码重写时注释残留或漂移。445 收藏 -
Go http.Client 默认会自动跟随重定向,但跨主机跳转往往需要白名单和结果保留策略。本文用 CheckRedirect 检查目标 URL 与历史请求,分别演示允许跟随、返回 ErrUseLastResponse 保留 3xx 响应、以及返回普通错误的配置边界。445 收藏 -
Go vet 的 stdmethods 检查器会针对 WriteTo、ReadRune、MarshalJSON 等熟知方法名核对标准签名。本文用 WriteTo 示例说明如何运行 go vet、如何用接口断言确认修复,以及它不覆盖自定义接口的边界。445 收藏 -
Golang · Go问答 | 2个月前 | 错误处理 · go · 数据库 · 排查 · SQL · rows.Close rows.Next Rows.Err Go database/sql 空结果
Go 查询 database/sql 时,Rows.Next 返回 false 不一定代表空结果。本文用一个分页查询故障拆开 Next、Err、Close 的职责,给出可复用的遍历模板、异常定位顺序与资源收尾检查。444 收藏 -
Go 1.22 引入的 slices.Concat 可以按顺序合并多段同类型切片。本文核对它的泛型签名、空输入返回 nil、结果切片与源切片的隔离关系,并给出容量和自定义切片类型的判断方法。444 收藏 -
Go 交叉编译开启 cgo 后找不到目标编译器,通常是只设置了 CGO_ENABLED 而没有准备匹配 GOOS/GOARCH 的 CC、目标头文件、运行库和链接器。本文按变量、工具链和报错层次给出排查方法。444 收藏 -
Go 表驱动测试加上 t.Parallel 后,多个子测试可能读到同一个循环变量。本文解释暂停时机、Go 版本差异、局部绑定写法和 -race 排查边界。444 收藏 -
Go 使用 json.Decoder 时,io.EOF 通常表示输入流已经正常结束,不等于 JSON 格式错误。本文用代码区分 EOF、空输入、UnexpectedEOF 和真正语法错误。444 收藏