qq_花开花谢_0
我有以下 Go 代码,它们最终会填满磁盘并失败ENOSPC(只是一个概念证明)。我如何从err返回的结果中os.Write确定它确实失败了ENOSPC(所以我需要一种errno在写操作后抓取的方法)?package mainimport ( "log" "os")func main() { fd, _ := os.Create("dump.txt") defer fd.Close() for { buf := make([]byte, 1024) _, err := fd.Write(buf) if err != nil { log.Fatalf("%T %v", err, err) } }}编辑:按照@FUZxxl 的建议更新程序:package mainimport ( "log" "os" "syscall")func main() { fd, _ := os.Create("dump.txt") defer fd.Close() for { buf := make([]byte, 1024) _, err := fd.Write(buf) if err != nil { log.Printf("%T %v\n", err, err) errno, ok := err.(syscall.Errno) if ok { log.Println("type assert ok") if errno == syscall.ENOSPC { log.Println("got ENOSPC") } } else { log.Println("type assert not ok") } break } }}但是,我没有得到预期的结果。这是输出:2015/02/15 10:13:27 *os.PathError write dump.txt: no space left on device2015/02/15 10:13:27 type assert not ok