Sonunda diski dolduracak ve ENOSPC
(yalnızca bir kavram kanıtı) ile başarısız olan aşağıdaki Go kodum var. os.Write
tarafından döndürülen () nedeniyle döndürülen err
'dan nasıl belirleyebilirim (bu nedenle yazım işleminden sonra errno
kapmak için bir yola ihtiyacım var)?Bir yazma işleminden sonra hata oluştu
package main
import (
"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)
}
}
}
DÜZENLEME: @FUZxxl olarak programı Güncelleme önerdi:
package main
import (
"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
}
}
}
Ancak, beklenen sonucu elde edemiyorum. İşte çıktı şöyledir:
2015/02/15 10:13:27 *os.PathError write dump.txt: no space left on device
2015/02/15 10:13:27 type assert not ok
Aslında bu işe düşündüm, ama err' syscall.Errno' 'dönüştürülebilir olamaz' görünüyor :(Benim güncellenmiş soruma bakın – Unknown
@Unknown Bu garip.Fmt.Printf ("% T", err) 'ın ne dediğini söyleyebilir misin? Hangi platformdasınız? – fuz
Yukarıdaki çıktıda görebilirsiniz," err' bir "* os.PathError", Linux amd64'deyim. – Unknown