Skip to content

Instantly share code, notes, and snippets.

@alecthomas
Last active November 6, 2015 01:27
Show Gist options
  • Save alecthomas/73172a9d50889836a0ce to your computer and use it in GitHub Desktop.
Save alecthomas/73172a9d50889836a0ce to your computer and use it in GitHub Desktop.
What would Go code look like with Swift 2.0-style error handling?
// before
func CreateZipWithWriter(writer io.Writer, sourceRoot string) error {
zf := zip.NewWriter(writer)
defer zf.Close()
return filepath.Walk(sourceRoot, func(p string, info os.FileInfo, err error) error {
if err != nil || info.IsDir() {
return err
}
relPath, err := filepath.Rel(sourceRoot, p)
if err != nil {
return err
}
zh, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
zh.Name = relPath
wf, err := zf.CreateHeader(zh)
if err != nil {
return err
}
rf, err := os.Open(p)
if err != nil {
return err
}
defer rf.Close()
_, err = io.Copy(wf, rf)
if err != nil {
return err
}
return nil
})
}
// after
func CreateZipWithWriter(writer io.Writer, sourceRoot string) error {
zf := zip.NewWriter(writer)
defer zf.Close()
return filepath.Walk(sourceRoot, func(p string, info os.FileInfo, err error) error {
if err != nil || info.IsDir() {
return err
}
relPath := try filepath.Rel(sourceRoot, p)
zh := try zip.FileInfoHeader(info)
zh.Name = relPath
wf := try zf.CreateHeader(zh)
rf := try os.Open(p)
defer rf.Close()
try io.Copy(wf, rf)
return nil
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment