Go语言技术文章
-
unicode.IsLetter 判断的是单个 rune 是否属于 Unicode Letter 类别,不等于判断用户看到的完整字符。中文通常返回 true,组合音标常属于 Mark,需要与 IsMark 和 UTF-8 遍历配合。452 收藏 -
Go 用临时文件替换配置或缓存文件时,新文件默认权限可能与旧文件不同。本文演示如何读取旧文件的权限位、应用到临时文件,并处理 umask、平台和异常清理边界。452 收藏 -
Go 向已关闭 channel 发送会触发运行时 panic。关键不是发送前猜测 channel 状态,而是把关闭权交给能确认所有发送方已退出的唯一协调者;接收方提前结束时用 done channel 或 context 通知发送方停止。451 收藏 -
Go range 遍历字符串时,索引返回的是 UTF-8 rune 在原字符串中的字节起始位置,而不是连续的字符序号。本文用代码区分 byte offset、rune 序号、[]rune 和非法 UTF-8 的处理边界。451 收藏 -
Go regexp.Split 的 n 参数不是分隔符数量,而是返回子串数量上限。n<0 返回全部结果,n=0 返回 nil,n>0 最多返回 n 个子串并保留最后的未切分文本。451 收藏 -
Golang · Go问答 | 5天前 | channel · 定时器 · select · time.After · Go问答 · Go timeafter怎么处理 Go time.After定时器 Go time.After循环 Go定时器读取 Go NewTimer与NewTicker
解释 Go time.After 返回值、循环等待与 time.Time 转换,比较 NewTimer 和 NewTicker 的使用边界,帮助排查定时器读取问题。451 收藏 -
Go 的 maphash.Bytes 适合把字节序列映射为进程内的 uint64 分桶值,但它不是加密摘要,也不能替代原文相等判断。本文用短键索引场景说明 MakeSeed、相同 Seed、不同数据结构实例和碰撞复核之间的边界。450 收藏 -
Go 泛型调用省略类型参数时,编译器要从实参、函数签名和约束中建立类型关系。本文用可编译示例说明推断成功与失败的边界,以及何时补写显式类型参数。450 收藏 -
Go 配置文件不要直接截断原文件,推荐先在同目录临时文件中写完并同步,再用 os.Rename 替换目标文件,同时处理关闭、清理、并发和跨平台边界。450 收藏 -
围绕 database/sql Rows 生命周期,讲清 QueryContext、Next、Scan、Err、Close 的职责边界,以及空结果、NULL、提前返回和迭代错误的处理方式。450 收藏 -
解释 Go color.NRGBA 的非预乘存储、RGBA() 的 16 位预乘返回值,以及 draw.Over 中 Alpha 如何参与混合,附固定输入的换算示例和常见边界。450 收藏 -
Go 中 nil 切片和空切片的 len 都是 0,但 reflect.DeepEqual 会因为 nil 状态不同返回 false。本文用最小示例解释原因,并比较 DeepEqual、slices.Equal 与规范化写法的适用边界。449 收藏 -
用 fs.FS 统一 Go 对磁盘目录和 embed.FS 的读取,讲清 fs.ReadFile、os.DirFS、fs.Sub、路径规则与错误边界。449 收藏 -
unsafe.StringData 可以让 Go 程序拿到字符串底层字节的指针,但这不等于获得了一块可长期持有、可修改的内存。本文用可运行的小实验区分指针有效期、字符串生命周期和只读边界,给出适合零拷贝场景的使用检查。448 收藏 -
Golang · Go教程 | 2星期前 | 标准库 · 并发安全 · 配置管理 · Go教程 · 文件系统 · 配置热更新 os.Rename embed.FS Go embed fs.ReadFile
Go embed 适合把默认配置随二进制发布,但运行时热更新不能直接覆盖嵌入文件。本文用 embed.FS 读取默认值,再通过临时文件校验和 os.Rename 原子替换外部配置,处理并发读取、失败回滚与发布检查。448 收藏