You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:15:04