Go问答技术文章
-
Go 接口值用 == 比较并不总是安全:当两个接口装着相同的切片、map 或函数类型时,比较会在运行时 panic。本文用最小示例说明原因,并给出动态类型检查与按业务语义比较的写法。378 收藏 -
Go 1.21 改变了 panic(nil) 与 recover 的返回语义。本文解释默认行为、旧模块兼容开关,以及如何用非 nil 哨兵稳定判断 panic。422 收藏 -
循环中 defer Close 不会在本轮循环结束时执行,而是等外层函数返回,文件多时就会让文件描述符持续累积。本文用小函数或显式 Close 修复这一边界,并说明如何检查关闭错误。202 收藏 -
Go 里的无标签 break 只结束最近的 for、switch 或 select。本文用嵌套示例说明为什么 switch 中的 break 不会跳出外层循环,以及标签、函数拆分和返回值的选择。125 收藏 -
Go range 遍历结构体切片时,迭代变量拿到的是元素值副本;本文对比索引、指针切片和 map 的写法,说明怎样让字段修改真正写回原数据。478 收藏 -
Go nil map 可以读取、len 和 range,却不能给元素赋值。本文解释 nil map 与空 map 的边界,演示 make 初始化,并排查函数返回值和结构体字段中的初始化遗漏。236 收藏 -
Go 的 map 元素不是可寻址变量,不能直接给 map 中结构体的字段赋值。本文解释编译错误原因,并给出读改写回、指针值与并发检查的实用写法。290 收藏 -
slices.Clone 对二维切片只做浅拷贝:外层容器独立,但内层切片仍可能共享元素数组。本文用反例说明原因,并给出保留 nil 行语义的逐行深拷贝写法。406 收藏 -
slices.Compact 只会合并连续重复元素,不是全局去重函数。本文用 Go 示例说明如何识别顺序边界、何时先排序,以及如何使用 CompactFunc。385 收藏 -
Go 的 os.CreateTemp 返回时文件仍处于打开状态。Windows 上把路径交给另一个程序前,必须先关闭 Go 文件句柄,再等待外部程序完成后清理临时文件。351 收藏 -
Go 创建多层目录时,os.Mkdir 只处理最后一级,os.MkdirAll 会补齐必要父目录。本文还解释 perm、umask、已存在目录与同名文件错误的处理边界。136 收藏 -
Go 追加日志却清空原文件,通常是 OpenFile 组合了 O_TRUNC。本文解释 O_APPEND、O_CREATE、O_TRUNC 的区别,并给出可复用的安全追加写法与并发边界。292 收藏 -
Go 里 Stat 会关注符号链接指向的目标,Lstat 则保留链接自身的信息。本文用 FileInfo、ModeSymlink、断链和 Readlink 示例说明如何选择。320 收藏 -
Go 的 io.ReadFull 读取固定长度数据时,EOF 表示一个字节都没读到,UnexpectedEOF 表示已读到部分数据后提前结束。本文用 n 和 err 设计可靠的错误分支,并说明如何放进固定长度协议解析。476 收藏 -
Go io.Copy 返回 short write 时,问题通常在目标 Writer:它少写了数据却没有返回具体错误。本文用返回值、Writer 契约和 WriterTo/ReaderFrom 快路径区分读端错误与写端短写。336 收藏