Go教程技术文章
-
Go 编译时出现 import cycle not allowed,通常不是某一行语法错,而是包依赖回到了起点。本文用 go list 和最小重构示例定位环路,说明如何拆出接口或共享类型,并用测试和依赖检查确认修复没有引入新问题。379 收藏 -
文件测试最容易留下脏现场:固定目录会互相覆盖,手写清理又常常漏掉失败分支。本文用 testing.TB.TempDir 完成隔离实验,核对目录生命周期、并发测试和清理顺序。379 收藏 -
用 big.Int 保存高位数金额,用 big.Rat 计算精确比例,再分别用 Cmp 做阈值比较、用 RatString 保留分数、用 FloatString 生成最终展示值。379 收藏 -
Go io.TeeReader 可以在下游继续读取原始上传流的同时,把已经读出的字节同步写给统计器。本文用一个保留 Close 的 ReadCloser 包装器记录实际流量,并说明同步写入、错误传播、提前停止和 Content-Length 的边界。379 收藏 -
用 C.CBytes、C.GoBytes 和 C.free 划清 Go 与 C 的字节缓冲区所有权,避免异步保存 Go 指针造成悬空引用。379 收藏 -
用 Go genetlink 的 GetFamily 查询 generic netlink family,遍历 Family.Groups 输出多播组名称与 ID,并说明如何按名称选择组后调用 JoinGroup。379 收藏 -
解析网络帧、文件头或自定义二进制格式时,字段长度和字节序必须同时明确。本文用 Go encoding/binary 的 BigEndian、ByteOrder 和 Read 说明如何读取固定长度字段,并处理短输入、结构体填充与读取方式选择。379 收藏 -
Go 服务做配置热更新时,真正要解决的不是重新读取文件,而是让新旧版本切换可验证、失败可回滚。本文用原子替换、版本号校验和恢复指针搭出一条可落地的更新流水线。378 收藏 -
从 HTTP 请求、后台 goroutine 和数据库查询三个场景说明 context.WithCancel 返回的 cancel 为什么必须调用,给出 defer、父子上下文和取消后收尾的可验证写法。378 收藏 -
目录扫描从 os.ReadDir 改成 os.File.ReadDir(n) 后,读取阶段可以按批次控制内存,但全局排序需求不会自动消失。本文用一个目录索引任务拆开读取、排序、错误收口和验收门禁,给出可复用的 Go 实现与取舍方法。378 收藏 -
Go io.Pipe 适合把边生成的数据直接接到 HTTP 上传请求。本文用 multipart 示例说明读写两端、Close 与 CloseWithError、请求取消和 goroutine 收尾,并列出 Content-Length、重试与可重复读取的边界。378 收藏 -
Go net/http 生产服务应显式配置请求头、响应写出和空闲连接超时,并把 ListenAndServe、信号监听、Shutdown 与 Close 组织成有边界的退出流程,避免慢连接拖垮服务或重启时直接丢失在途请求。378 收藏 -
Go 1.27 的 jsontext.Value 可保存一个原始 JSON 值,但直接转换、Clone、IsValid、MarshalJSON 与 Encoder.WriteValue 的职责不同。本文从切片复用导致内容变化的现象出发,给出安全保存、结构体透传和再次编码方案。378 收藏 -
Go 处理超出 int64 范围的业务整数时,应使用 math/big 的 big.Int.SetString 完整解析,明确十进制与 base=0 的区别,检查失败标记并在转 int64 前确认范围。378 收藏 -
Go url.URL.Port 只返回合法数字端口字符串。本文说明如何区分未设置端口与显式默认端口,并配合 URL.Hostname、net.SplitHostPort 正确处理域名、IPv4、IPv6 和业务默认端口。378 收藏