Go语言技术文章
-
Go strconv.CanBackquote 用于判断字符串能否原样放入单行反引号字符串。本文解释它会拒绝哪些字符,并给出失败时回退到 strconv.Quote 的实用写法。262 收藏 -
Go go mod edit 一次只处理一个 go.mod 文件。本文用 find 和循环批量修改模块路径,并说明 -print、-json、源码 import、replace 与 v2 主版本后缀的边界。262 收藏 -
io.Copy 把正常 EOF 视为成功结束,零字节复制可以返回 nil。结合临时文件示例,区分空文件、末尾偏移与受限输入,并说明非空判断、复制数量和目标收尾的职责。262 收藏 -
讲清 Go io/fs 中 FileInfo.Mode、ModeDir 与 IsDir 的关系,并比较 DirEntry、Stat、Lstat 在目录类型判断中的使用边界。262 收藏 -
Go 关闭 channel 触发 panic,通常是关闭责任没有收口:nil channel、重复关闭和向已关闭 channel 发送分别对应不同的生命周期错误。本文用发送方所有权、协调者收口和接收端 ok 判断整理排障与迁移边界。262 收藏 -
使用 go-i18n TemplateData 向消息模板传入命名字段,对比 map 与结构体,解释 PluralCount 的独立职责、缺键处理和网页输出转义。262 收藏 -
用 Go uniseg 的 Graphemes.LineBreak 判断每个 grapheme cluster 后面是禁止、可选还是必须换行,并说明何时应改用 FirstLineSegmentInString。262 收藏 -
Go 升级后 bufio.Scanner 的分行结果、token 数量或错误表现发生变化时,先固定工具链和输入,再核对 SplitFunc、Buffer、Bytes 生命周期与 Err 结果,避免把输入边界误判为版本回归。262 收藏 -
使用 go/types 分析泛型约束时,Term.Type() 不包含 ~ 语义。本文说明如何通过 Tilde() 与 Type() 成对读取,并用 NewTerm 正确复制联合约束中的近似类型项。262 收藏 -
解释 filepath.ToSlash 如何把本地路径分隔符转换成斜杠,区分 Windows 与 Unix 行为,并给出 URL、归档条目和字符串比较中的使用边界。262 收藏 -
Go sync.RWMutex 的 RLocker 会把读锁能力适配为 sync.Locker:调用 Lock 实际执行 RLock,调用 Unlock 实际执行 RUnlock。本文用通用组件、读写生命周期和边界示例说明怎样安全复用它。261 收藏 -
用 ReadFull 和 LimitedReader 读取固定长度协议载荷,区分读取上限、读满判断与提前 EOF,说明流式写入错误、缓冲Reader和后续帧边界。261 收藏 -
Go 服务从终端切换到脚本或服务管理器后,相对路径可能因为工作目录变化而失效。本文用 os.Getwd 确认现场,在启动阶段用 filepath.Abs 固定路径,并说明为什么不应在运行中随意 os.Chdir。261 收藏 -
Go 错误被 fmt.Errorf 包装后,直接类型断言可能失效。本文用自定义错误演示 errors.As 如何沿错误树取出目标类型,并区分 As、Is 与 errors.Join 的适用边界。261 收藏 -
netip.Addr 中的 192.0.2.1 与 ::ffff:192.0.2.1 可能指向同一个 IPv4,但前者是 IPv4、后者是 IPv4 映射 IPv6,因此直接比较不会相等。本文用最小复现解释 Is4、Is4In6、BitLen 与 Unmap 的关系,并给出 map 键和回归测试的处理方式。261 收藏