Personally the syntax seems like a regression to me, as a JavaScript programmer who moved on to promises from the old callback function(err, Val){ if err pattern. Higher order control flow abstractions are really nice, but hard to do in go because of the weak type system. If it was fully dynamic we couldn't worry about it, and if it allowed a bit more power like generics we could have elegant stuff like Haskell's either monad.