CTO
func CopyFile(src, dst string) error { r, err := os.Open(src) if err != nil { return fmt.Errorf("copy %s %s: %v", src, dst, err) } defer r.Close() w, err := os.Create(dst) if err != nil { return fmt.Errorf("copy %s %s: %v", src, dst, err) } if _, err := io.Copy(w, r); err != nil { w.Close() os.Remove(dst) return fmt.Errorf("copy %s %s: %v", src, dst, err) } if err := w.Close(); err != nil { os.Remove(dst) return fmt.Errorf("copy %s %s: %v", src, dst, err) } }
Псевдокод, указанный в примере кажется избыточным. В реальности же, ошибки могут быть самыми разными, и сообщения и операции будут персонализированны.
«Индустриализация» обработки ошибок, методами, подобными «check» не уместна и только усложнит читабельность и поддержку кода.