Hi,

I am concerned with the direction Go2 is going. If anything, Go2 should 
reduce and consolidate features from Go1 rather than adding new ones. 
Remember that C++ and Java too were once simple languages and people keep 
adding stuffs instead of consolidating features. 

About error handling, I prefer the Go1 error handling approach. It is 
simple, readable, and scalable. Everything is laid out in plain sight and 
there is no hidden alternate execution paths.

The complaint people have about Go1 approach is the repetitive error 
checks. I will use the following code example from another thread 
<https://groups.google.com/forum/#!topic/golang-nuts/1McP4_-oOpo> by DrGo.

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)
 }
  return nil
}

Many people are thinking how to reduce the four error checks in the above 
example, and they come up with various keywords and ways to reduce those 
error checks. However, they are forgetting that CopyFile function itself is 
an error-check reduction mechanism. The next person who needs to copy file, 
only needs to use the function and handle one error check instead of four. 
In addition, you get the benefits of reusability and readability. You gain 
all those with simple modularization instead of adding keywords. The 
approach is also more flexible and scalable.

So, the next time you feel you are writing too many error checks, see if 
you can refactor those into smaller functions. Even if you can't further 
decompose your code, take heart knowing that you only need to write them 
once. The next time you need a similar functionality, you just reuse the 
function and avoid repeating those error checks. 

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to