Linux环境下Go如何判断Write返回的PathError为磁盘空间不足
Linux 环境下 Go 判断磁盘空间不足错误的方案
*fs.PathError 结构体的 Err 字段在 Linux 平台下实际对应底层系统调用返回的 syscall.Errno 类型,你可以通过类型断言直接匹配错误码,完全不需要依赖错误字符串匹配:
- 第一步:使用
errors.As将捕获到的错误转换为*fs.PathError类型 - 第二步:将
PathError中的Err字段转换为syscall.Errno类型 - 第三步:判断该错误码是否等于
syscall.ENOSPC(对应 Linux 系统的「磁盘空间不足」错误)
示例代码如下:
package main import ( "errors" "io/fs" "os" "syscall" ) func isNoSpaceError(err error) bool { var pathErr *fs.PathError if errors.As(err, &pathErr) { errNo, ok := pathErr.Err.(syscall.Errno) if ok && errNo == syscall.ENOSPC { return true } } return false } // 测试用例 func main() { f, err := os.OpenFile("/mnt/test.dat", os.O_WRONLY|os.O_CREATE, 0644) if err != nil { panic(err) } defer f.Close() _, err = f.Write([]byte("test data")) if err != nil { if isNoSpaceError(err) { println("磁盘空间不足") } else { println("其他写入错误:", err.Error()) } } }
该方案直接依赖 Linux 系统调用的标准错误码,稳定性远高于字符串匹配,不会受系统语言、内核版本差异导致的错误信息变化影响。
内容的提问来源于stack exchange,提问作者xrfang
相关产品推荐
相关产品推荐

