Go问答技术文章
-
讲清 Go slices.Grow 的额外容量参数、返回值和循环位置:按预计总数计算剩余数量,在 append 前一次预留,避免把容量误当长度。250 收藏 -
slices.Clip 会把切片容量收紧到长度,适合在函数边界阻止下游 append 写入隐藏尾部,但它不复制元素,也不保证释放仍被引用的大底层数组。本文对比 Clip、三索引切片与复制方案。181 收藏 -
Go 方法值创建时会保存接收者。指针接收者保存的是指针副本,调用时仍能沿指针修改原对象;值接收者保存的是结构体副本,后续变化不会回写。340 收藏 -
Go nil 接收者调用方法不一定会 panic,关键要区分 nil 指针、nil 接口以及方法体是否发生字段解引用。本文用最小示例和检查表定位真实的 panic 边界。309 收藏 -
Go 中 T 与 *T 的方法集并不相同:值接收者方法同时属于 T 和 *T,指针接收者方法只属于 *T。本文用最小示例解释接口赋值失败、自动取址边界与实现选择。394 收藏 -
Go 1.20 起 fmt.Errorf 支持多个 %w,可把多个底层错误保留为可遍历分支。本文对比单错误链、多错误包装与 errors.Join 的边界,并给出 errors.Is、errors.As、go.mod 和 CI 的迁移检查清单。342 收藏 -
Go errors.As 匹配自定义错误时,目标变量的值类型、指针类型和地址层级必须与错误的动态类型一致。本文用包装错误示例说明为什么拿不到值,以及如何排查 nil 指针和类型错配。418 收藏 -
errors.Join 返回的是可遍历的错误树,业务判断应直接使用 errors.Is;需要展示全部原因时再读取 Unwrap() []error,不能依赖字符串拆分或 errors.Unwrap。495 收藏 -
Go io.ReadFull 读取固定长度消息时,空输入返回 io.EOF,读到一部分后提前结束返回 io.ErrUnexpectedEOF。本文用帧头、帧体示例说明如何分类处理短读、错误包装和重试边界。277 收藏 -
Go 读取标准输入遇到 io.EOF 通常表示输入自然结束,不是错误日志。本文用逐行读取和固定长度读取对比 EOF、真实 I/O 错误与 ErrUnexpectedEOF 的处理边界。195 收藏 -
Go 的 os.Getenv 无法区分环境变量未设置和显式空值,本文用 os.LookupEnv 保留 exists 状态,并给出默认值、校验和测试的处理方式。147 收藏 -
Go 的 0644 是 Unix 权限表达式。Windows 上 os.Chmod 只使用 0o200 位控制只读属性,用户和组级访问控制要交给 Windows ACL。137 收藏 -
Go 中 path 适合 URL 等正斜杠协议路径,filepath 适合 Windows 本地文件路径。本文说明反斜杠字符串写法,以及 ToSlash、FromSlash 的跨平台转换边界。159 收藏 -
Go 编译出现 undefined: C 时,先检查 import \"C\"、CGO_ENABLED、build tag 和 go list 文件清单,再区分 cgo 文件未入选与 C 声明缺失。183 收藏 -
Go 的 -ldflags -X 只能写入满足条件的包级 string 变量,不能修改 const。本文用最小示例说明正确声明、完整 import path、初始化边界和不生效时的排查方法。108 收藏