-
Go 字符串的 UTF-8 字节长度、rune 数量、用户感知字符数量和等宽显示宽度解决的是四类不同问题。本文用 uniseg.StringWidth 对比组合字符、中文和 emoji,给出选择指标与最小检查代码。
-
Go slog.Logger.Enabled 可以在日志级别判断阶段提前返回,避免为不会输出的日志构造昂贵参数。本文用最小示例说明 HandlerOptions.Level、Enabled、LogAttrs 与 LogValuer 的配合边界。
-
解释 synctest 的任务归属、channel 与 timer 关联边界,给出自包含通知测试,说明 Wait 的观察范围及启动、取消、退出应如何放进同一气泡。
-
Go mime/multipart.Reader 中,Part.Read 返回 io.EOF 表示当前部件结束,NextPart 返回 io.EOF 才表示整个 multipart 消息结束。本文用手动读取、io.ReadAll 和异常输入三个示例说明结束判断、n>0 与 EOF 同时返回及部件切换边界。
-
Go token.File.Pos 接收文件内字节偏移并返回 token.Pos;再交给 FileSet.Position,就能得到文件名、行号和列号。本文说明 Base、Size、Offset 与越界钳制,给出源码分析工具中的完整写法。
-
Go 1.24 起可以通过 http.Transport.Protocols 明确声明客户端支持的协议集合。本文说明怎样只启用 TLS 上的 HTTP/2、为什么 ForceAttemptHTTP2 不能代替协议集合配置,以及服务端不支持 HTTP/2、使用明文 h2c 或自定义 TLS 时分别要注意什么。
-
Go net.Resolver.LookupAddr 接受 IP 地址并返回一个或多个反向 DNS 主机名。本文用带超时的上下文处理 PTR 查询,说明如何保留多结果、区分空切片与错误,并排查纯 Go 与 cgo resolver 的环境差异。
-
用 bufio.Reader 按换行分块读取大文件,解释 ReadString、ReadBytes、ReadLine 的边界,处理跨缓冲区换行、末尾无换行和超长行。
-
Go YAML 配置转 JSON 后出现数字或布尔类型差异,通常来自 YAML 解码目标与 JSON 再解码到 any 的默认映射。本文用最小复现定位变化层,并给出结构体、UseNumber 与 RawMessage 的修正方式。
-
Go width.Fold 可将文本映射到规范宽度,但不等于全部转半角。本文给出字符串处理函数,比较 Fold、Narrow、Widen,并说明原文保留、查询一致和迁移冲突。
-
Go bytes.Clone 适合在多个处理阶段需要独立修改 []byte 时隔离底层数组别名。本文从切片共享、nil 与空切片、长度容量以及浅层复制边界出发,给出可直接复用的工程写法。
-
Go flag.FlagSet.Visit 只遍历 Parse 后被用户显式设置的参数,适合记录命令行覆盖项;VisitAll 用于完整参数表,Lookup 用于单项查询。本文用配置覆盖和诊断日志场景说明三者边界。
-
Go strconv.ParseInt 通过 base 指定进制、通过 bitSize 约束目标宽度,并返回 int64 与 error。本文说明固定进制和 base=0 自动识别的差异,拆解符号、前缀、非法数字、位宽溢出和 NumError 的处理边界。
-
解释 Lumberjack 多进程共用轮转文件时实例锁、句柄和归档管理无法协调的原因,给出独占目录初始化示例,并说明多副本命名、迁移与目录容量管理。
-
使用 afero.NewReadOnlyFs 把可写的 afero.Fs 包装成只读视图,明确读取、Stat、已存在目录与创建删除重命名等修改操作的边界,并给出可回滚的注入方式。