Go教程技术文章
-
os.WriteFile 会先打开并截断已有文件,写入中途失败可能留下残缺内容。本文解释权限错误的判断方法,并用同目录临时文件加替换保护原文件。118 收藏 -
Go 文件读取不是简单比较 API 名称:完整内容且能放进内存预算时用 os.ReadFile,只取固定范围或需要随机访问时用 File.ReadAt;本文用文件大小、访问模式和短读处理给出判断清单。115 收藏 -
unsafe.String 只把一段连续字节按指定长度解释为字符串,不会替你检查对象类型、所有权或 UTF-8。本文从 []byte 的正确入口讲清指针、长度、可修改性和生命周期边界,并给出该复制时的判断方式。490 收藏 -
Go unsafe.Slice 的长度参数是元素数,不是 C 缓冲区字节数。本文用 cgo 示例说明如何校验指针、换算长度、维持 C 内存生命周期,并避开布局和 Go 指针陷阱。495 收藏 -
Go 1.22 引入 reflect.TypeFor 后,泛型函数可以直接拿到类型参数 T 对应的 reflect.Type。本文用一个小型类型描述器说明 TypeFor、TypeOf、Kind 和 Implements 的边界。479 收藏 -
reflect.Value.IsZero 判断的是类型零值,time.Time.IsZero 判断的是零时间点。本文拆开值、指针和接口字段的反射入口,给出避免时间字段误判的写法与检查清单。138 收藏 -
Go 反射中 reflect.Value.CanSet 返回 false 时,先用 CanAddr 区分不可寻址的值副本,再用 CanInterface 和字段导出状态识别只读字段;本文给出指针、Elem、字段诊断和安全修复示例。361 收藏 -
Go 的 iter.Pull2 把 Seq2 转成 next/stop 拉取接口。本文用一个可复用示例说明提前 break 时为什么必须调用 stop,以及 defer stop()、ok 判断和并发边界怎么处理。165 收藏 -
用 iter.Seq2[int, error] 同时传出行号和校验错误,说明 range、yield、continue 与 break 的边界,以及 Go 1.23 语言版本要求。140 收藏 -
cmp.Or 会把类型零值视为‘没有候选’,适合简单回退,却无法仅凭值区分未提供和显式传入的 0、false 或空字符串。本文用配置示例说明原因,并给出指针存在性方案。182 收藏 -
用 Go maps.EqualFunc 比较带 float64 字段的 map,拆清键集合、结构体值、绝对与相对误差、NaN 和无穷大的处理边界。344 收藏 -
Go maps.DeleteFunc 用回调返回值决定删除或保留,直接修改原 map。本文用状态清理示例说明条件写法、结果核对、nil map 与 clear 的边界。491 收藏 -
Go slices.BinarySearchFunc 遇到重复比较键时返回等价区间最左索引;本文说明 found、插入点、比较器和继续扫描全部重复项的边界。214 收藏 -
讲清 Go slices.SortStableFunc 按团队、优先级等多个字段排序时的稳定比较器写法,说明比较结果、降序参数、等价元素和常见溢出误区。250 收藏 -
用 Go 的 slices.CompactFunc 按结构体字段处理相邻重复数据,说明比较函数如何定义、为什么只保留连续数据中的第一条,以及就地修改和返回值的使用边界。245 收藏