Go教程技术文章
-
Go 批量任务如果靠定时轮询检查状态,既浪费唤醒次数又难以处理关闭流程。本文用 sync.Cond 把状态检查、等待和批量唤醒组织起来,并说明 Signal、Broadcast 与退出条件的选择。204 收藏 -
Go netip.Prefix 表示一个 CIDR 网段,但 Addr 可能仍保留主机位。本文用 Masked 得到规范化起始地址,再按 IPv4 与 IPv6 的位数计算最后地址,说明无效前缀、单地址前缀和地址族边界。204 收藏 -
Go使用database/sql遍历Rows时,循环结束不代表读取完整。本文用一个列表函数说明如何同时处理Scan、Close和Rows.Err,避免把部分结果误当成成功响应。203 收藏 -
Go runtime/metrics 的 Value 不能一律按 uint64 读取,应先依据 Description.Kind 选择 Uint64、Float64 或 Float64Histogram;本文整理 KindBad、未知类型和稳定读取流程。203 收藏 -
用 Go log/slog 在请求边界派生带 request_id 的 logger,结合 With、WithGroup 和 LogAttrs 组织结构化字段,并说明 context、脱敏与并发复用边界。202 收藏 -
介绍 Go http.ResponseController.SetWriteDeadline 的单次响应用法,说明绝对期限、缓冲写入、Flush、ResponseWriter 包装器、ErrNotSupported 与 context、Server.WriteTimeout 的分工。202 收藏 -
Go 1.27 支持具体类型声明带自身类型参数的方法,但接口方法仍不能声明类型参数,泛型方法的某次实例化也不会进入类型的方法集。本文给出普通接口方法、泛型函数和适配器三种组合方式。201 收藏 -
本文用 go.work 连接本地 API 与服务模块,避免 replace 污染 go.mod,并通过 GOWORK=off 测试和分阶段升级保持两个模块独立发布。201 收藏 -
Go multipart 上传要同时限制请求总大小和解析内存:MaxBytesReader 负责入口上限,ParseMultipartForm 负责内存与临时文件取舍,再把超限统一返回 413 并清理资源。201 收藏 -
Go 1.24 引入的 os.Root 可以把文件读写限制在上传目录内。本文对比 filepath.Join、os.OpenRoot 与 os.OpenInRoot 的使用边界,并说明符号链接、平台差异、性能和资源释放。200 收藏 -
用一个实现 io.Reader 的限速包装器接入 io.Copy,让文件或请求体的复制链路按字节速率发送,文章同时说明读取粒度、突发流量、错误处理和并发复用边界。200 收藏 -
Go token.File.SetLines 返回 false,通常不是 API 随机失败,而是行首偏移没有满足严格递增、范围小于文件长度等约束。本文用一组可定位的判断方法说明如何构造行偏移表,并把它接回 Pos、Line、Offset 与 Position 查询。200 收藏 -
用 Go archive/tar 的 Header.Typeflag 区分目录、普通文件、硬链接和符号链接,配合 Linkname、Size 与 WriteHeader 处理不同条目的数据边界。199 收藏 -
用 Go 1.23 的 iter.Seq2 为树形索引提供键值遍历时,可让 All 返回中序序列,并让递归 walker 把 yield=false 一路向上返回,从而支持 range break、保持封装且避免构造临时切片。199 收藏 -
Go 的 ResponseController.EnableFullDuplex 允许 HTTP/1 Handler 在请求体尚未结束时交错读取与写响应,但它并不 Hijack 底层连接。本文给出逐块读取、逐块确认的完整写法,并说明包装器、截止时间、HTTP/2 与代理缓冲边界。199 收藏