Go语言技术文章
-
Go encoding/csv 默认会用第一条记录的字段数约束后续行。把 Reader.FieldsPerRecord 设为 -1 后,可以保留每行原始字段,再在读取循环中统计字段数并单独处理解析错误。303 收藏 -
Go 服务端拿到 UnixConn 后,怎样读取连接对端的 pid、uid、gid?本文从 socket 文件权限和连接凭据的区别讲起,给出 Linux 下通过 SyscallConn、RawConn.Control 与 SO_PEERCRED 获取 Ucred 的写法,并说明如何隔离 BSD/macOS 等平台差异。302 收藏 -
用 Go database/sql 查询一条记录时,QueryRowContext 的错误要在 Scan 处读取,并正确区分 sql.ErrNoRows、类型转换失败和查询错误。302 收藏 -
Go atomic.Uint32 的原子加法仍会按无符号范围回绕。本文按累计总量、固定阈值和循环计数比较处理方案,给出先检查剩余额度再CAS提交的原创示例,并说明并发清零与其他写入口的风险。302 收藏 -
Go embed 只能从编译时声明的路径读取资源。本文用 embed.FS 配合 fs.Sub 组织多级静态目录,并说明路径前缀、目录遍历和 HTTP 暴露时的常见误区。302 收藏 -
Go 1.24 引入的 testing.B.Loop 能自动控制基准计时边界,并降低 b.N 循环中 setup、cleanup 和结果被优化掉的风险。本文用一个字符串统计小项目说明写法、迁移要点和不能混用的边界。302 收藏 -
Go 的 os.Rename 只能在满足操作系统条件时直接移动文件。遇到跨文件系统失败,应把复制、同步、目标替换和源文件删除拆开处理。302 收藏 -
Go astutil.AddImport 可以向已经解析的 ast.File 幂等加入导入路径;本文从源码解析、AST 修改、格式化写回和别名边界说明完整做法。302 收藏 -
用 go-ldap/ldap/v3 的 ModifyRequest 和 Replace 只更新一个指定属性,并区分替换、追加、删除的请求语义。302 收藏 -
用 Go genetlink 封装只读请求时,把 Command 和 Version 放进通用消息头,把 Data、family ID、Request/Dump 标志和回复解码留在各自边界,避免 helper 藏掉协议差异。302 收藏 -
Go beep 中 Seq 用于按顺序衔接音频,Mix 用于同时混合多个 Streamer。本文从播放场景、采样率和错误边界说明两者区别,并给出选择表。302 收藏 -
Go 默认把接口中的 JSON 数字解码为 float64,超过安全精度时可能改变原始值。本文用 Decoder.UseNumber 保留 json.Number 文本,先用 json.Valid 和格式判断选择 Int64 或 Float64,再处理小数、越界和浮点误差。302 收藏 -
用 io.LimitReader 约束读取配额,以 io.CopyBuffer 和独占缓冲减少整段临时存储,说明专用复制接口、超限判定与并发复用的边界。302 收藏 -
用 Go netip.AddrPort.AppendBinary 把 IP 地址和端口追加到已有字节缓冲区,说明 IPv4、IPv6、端口字节序、错误处理与 UnmarshalBinary 还原方法。302 收藏 -
Go TempFile 创建成功不代表清理必然成功。本文说明句柄关闭、路径删除和资源归属的区别,给出保留业务与清理错误的函数,并讨论 Windows 占用、延迟清理及用户状态反馈。301 收藏