Go语言技术文章
-
Go io.NewOffsetWriter 会把逻辑写入偏移映射到 WriterAt 的指定起点,但它不自动限制区间长度。本文用最小示例说明 Write、WriteAt、Seek 的偏移关系,以及如何补上长度检查。124 收藏 -
Go 先用 filepath.EvalSymlinks 检查,再调用 os.Open,仍可能因检查与使用之间的 TOCTOU 竞态打开意外文件。本文区分 IsLocal、EvalSymlinks 与目录根约束,并给出 Go 1.24+ 的 os.OpenInRoot、os.Root 迁移写法。124 收藏 -
Go 的 unicode.IsPunct 按 Unicode 通用类别 P 判断 rune 是否为标点。本文说明为什么不能只判断 ASCII,给出逐字符过滤写法,并区分 IsPunct、IsPrint、IsSpace 和无效 UTF-8 的边界。124 收藏 -
说明Go 1.27起go doc版本后缀的用法,演示固定模块版本与符号检索,并区分项目依赖、临时模块查询和API兼容性判断。124 收藏 -
Go bytes.Buffer 的读写状态混乱,通常来自把 unread 区域、写入追加和 Bytes 返回的别名混在一起。本文用 Len、Cap、Available 和最小代码示例说明如何分离读写阶段、处理别名、复用缓冲区并定位 EOF。123 收藏 -
用日报写入示例说明Go os.File.Sync的职责,区分缓冲写入、Flush、Sync和Close,保留阶段错误并说明批次确认、失败残留及持久化边界。123 收藏 -
Go x/text/width 的 Widen 会把存在宽体变体的字符映射为宽字符,适合全角化处理。本文给出字符串与流式 Reader 两种写法,并说明未映射字符、Unicode 宽度类别和数据存储边界。123 收藏 -
Go 的 math.Ilogb 返回浮点数的二进制整数指数,不是普通的 Log2 结果。本文从 2 的幂、非整数幂和 Frexp 对比入手,解释零、无穷大、NaN 的特殊返回值,并给出选择函数和封装边界。123 收藏 -
用 Humanize CommafWithDigits 控制千分位显示的小数位上限,解释截取、不补零和负值行为,提供有限输入包装示例,并区分原始数值、展示文本与舍入需求。123 收藏 -
用 netip.ParseAddr 与 IsMulticast 判断 IPv4、IPv6 和映射地址是否为组播,解释零值、未指定地址以及 IsGlobalUnicast 的区别,并提供配置分类写法与边界样例。123 收藏 -
Go 1.20 起普通接口可满足 comparable,但受 any 约束的类型参数、附加方法与不可比较动态值仍有不同边界。结合集合示例区分编译错误、运行时风险与业务键设计。123 收藏 -
本文围绕 slices.Compact 解释如何判断输入是否满足使用边界:识别连续重复、空切片、单元素和非连续重复,并说明返回长度、底层数组复用与尾部清零的影响。123 收藏 -
用 Go slices.Chunk 把大切片按固定大小分批,覆盖尾批次、空输入、非法批大小和子切片生命周期。123 收藏 -
围绕路径参数错误解码,区分路径段和查询编码、URL.Path 与 RawPath,并用原创示例说明重复转义、加号变空格和忽略错误导致空结果的处理。123 收藏 -
Go 在已有前缀后追加 ZIP 数据时,需要在条目写入前用 Writer.SetOffset 设置 ZIP 起点,并检查 Close 写出的中央目录。本文给出完整容器写入、NewReader 重新读取和调用顺序示例。123 收藏