Go语言技术文章
-
io.NewSectionReader 适合从一个可随机读取的数据源中切出固定区间。本文用 bytes.Reader 演示 Offset、Read、ReadAt、Seek 与越界 EOF 的实际边界,避免把局部读取误写成全量读取。439 收藏 -
os.DirFS 把目录包装成 io/fs.FS,但它不等于 chroot;filepath.Join 只能拼接本地路径,fs.ValidPath 负责校验 FS 名称,符号链接仍可能把访问带出根目录。439 收藏 -
Go 普通 map 不支持并发读写,读、写、删除和遍历必须进入同一个同步边界;本文用并发计数器演示 RWMutex 的封装方式,并说明何时评估 sync.Map。439 收藏 -
解释 Go copy 复制切片时返回数量变少的原因,围绕目标切片长度、容量、make 初始化和 append 选择给出排查与修复方法。439 收藏 -
Go SetFinalizer 的触发时机由垃圾回收决定,不适合承担文件描述符、连接等非内存资源的确定性关闭。本文用 Close、defer、sync.Once 和 runtime.AddCleanup 组合出显式主路径加兜底清理的方案,并说明边界。439 收藏 -
Go 的 errors.Is 会沿错误包装树匹配哨兵值。本文用 %w 上下文包装、错误分类和 API 契约示例,说明为什么 ==、%v 拼接和重复 errors.New 会失效。439 收藏 -
Go GOMAXPROCS 默认值会结合逻辑 CPU、亲和性与容器配额。本文说明 Go 1.25 起的策略、显式覆盖及自动更新边界,提供只读示例和恢复默认的配置取舍。439 收藏 -
Go archive/tar 读取 unexpected EOF 时,关键是区分正常归档结束与条目数据未读满。本文结合 Header.Size、实际读取字节数和 Next 的边界行为,给出定位截断归档的排查写法。439 收藏 -
Peek用于只看不消费,UnreadByte用于退还最近读取的一个字节,二者不能机械配对。通过固定前缀识别与ASCII数字字段示例,说明共享Reader、借用切片、分隔符归属、短读与超长输入的处理边界。439 收藏 -
Go time.Time.AppendBinary 可以把时间追加到已有 []byte,并返回可交给 UnmarshalBinary 的二进制表示。本文说明追加缓冲区、时区偏移、错误处理和版本边界。439 收藏 -
Go x/text/unicode/bidi 的 Ordering 用于保存段落的视觉顺序。本文从 Paragraph.Order 出发,演示怎样遍历 NumRuns 和 Run(i),读取每段方向、原始位置与文本,并说明行级排序、UTF-8 字节位置和重新设置段落后的失效边界。439 收藏 -
Go x/text/search 的 IgnoreCase 不是简单把两边字符串转成小写,而是保留原文并按语言规则完成大小写不敏感匹配。本文从一个小型搜索工具出发,说明它与 ToLower、Loose、Exact 的区别。439 收藏 -
Go x/text/width 的 Widen 处理半角片假名时,半角浊音符号可能变成组合标记。本文说明宽度映射与 NFC 规范化的区别,并给出原文、展示值和比较键的分层写法。439 收藏 -
Go debug/dwarf.Reader 按前序顺序读取 DIE,Children 表示后面有子树,Tag 为零表示当前子列表结束,nil 则表示整个 info section 读完。本文用深度计数器和 SkipChildren 讲清遍历写法。439 收藏 -
Go 的 net/url.URL.Port 只返回 URL 中显式写出的端口,不会自动补出 http 或 https 的默认端口。本文用一段可复用的解析代码说明显式端口、默认端口、IPv6 主机和异常输入的处理边界。439 收藏