Go教程技术文章
-
Go 判断 IP 是否属于指定网段时,推荐用 net/netip 的 ParseAddr、ParsePrefix 和 Prefix.Contains。本文给出 IPv4/IPv6 示例,并说明非法输入、地址族不匹配、IPv4-mapped IPv6 与 IPv6 zone 的边界。188 收藏 -
用 sync.WaitGroup 负责并发任务的完成计数,再配合带容量错误通道与 errors.Join 汇总每个任务的失败原因,覆盖 Add、Done、Wait、close 的时机和取消边界。188 收藏 -
围绕 go generate 的指令、工作目录、环境变量和输出边界,整理一套可重复执行的 Go 代码生成方案,并给出 CI 差异检查清单。188 收藏 -
用 Go archive/tar 解包时,不能只把 Header.Name 与目标目录 Join 起来。本文用文件名本地化检查、条目类型拒绝和 os.Root 根目录写入约束,给出一套可落地的安全解包方案。188 收藏 -
Go 1.27 为 database/sql/driver 新增 RowsColumnScanner,使驱动可通过 NextRow 和 ScanColumn 直接处理用户目标地址。本文拆解传统中转层、兼容写法与可靠基准方法。187 收藏 -
Go 1.27 将 macOS 支持门槛提高到 macOS 13 Ventura。本文用构建机、目标平台和 cgo 三层检查,帮助你判断旧 macOS 是否会在升级后卡住。187 收藏 -
Go runtime.GC 只能推动一次垃圾回收,不能保证进程 RSS 立刻下降。本文区分对象可达性、运行时堆页和操作系统内存,给出 MemStats、pprof、FreeOSMemory 与 GOMEMLIMIT 的使用边界。187 收藏 -
Go slog 想让 API logger 和后台任务 logger 使用不同最低级别,应分别创建 handler 和 HandlerOptions;固定阈值传 slog.Level,运行时调整使用各自的 slog.LevelVar。187 收藏 -
Go maps.Keys 返回的是键迭代器,不保证每次调用顺序一致。无序诊断可以直接遍历;日志、快照、接口文本和测试若要求稳定结果,应使用 slices.Sorted 或业务比较器显式建立顺序。187 收藏 -
用 Go 的 fs.Sub 把 embed.FS 中的 web 子目录变成独立根目录,示范模板和 HTTP 文件服务接入方式,并说明路径、错误处理、符号链接与测试边界。187 收藏 -
Go 的 fs.ValidPath 校验的是 io/fs 虚拟文件系统名称:必须是 UTF-8、非根式、以正斜杠分隔,不能含空段、点段或父目录段,只有“.”可表示根目录。本文说明它与 filepath、go:embed 模式的区别,并给出安全拼接和测试写法。187 收藏 -
Go 1.20 引入的 http.ResponseController 把 Flush、Hijack、读写超时和全双工读取统一到一个控制入口。本文用最小示例说明它如何工作、何时返回 ErrNotSupported,以及接管连接后必须承担哪些清理责任。186 收藏 -
用 Go reflect 读取结构体字段标签时,先统一处理指针与结构体类型,再结合 StructField.Tag 的 Get 或 Lookup 读取标签,并正确拆分 json 等逗号选项。186 收藏 -
用 go.work 组织多个本地 Go 模块,说明工作区 replace 的覆盖关系,并给出 GOWORK、go list 与发布前收拢配置的检查方法。186 收藏 -
Go 的 time.Ticker 适合固定节拍触发工作,但当一次任务比 tick 间隔更长时,调度、积压和取消边界很容易混在一起。本文用一个定时刷新任务说明 Stop 与 Reset 的正确位置,并给出带背压、可退出、可观测的写法。185 收藏