As we discussed earlier this evening here are some of my criticisms of go:
-
Lack of parametric polymorphism, the failure to include C++'s templates, Java's generics, etc. makes it fundamentally impossible to do metaprogramming necessary for reusable code. And the go creators fundamentally know this is a necessary feature: the included hash table type is specialized to the types it is used with, a faculty not available to actual users of the language.
-
Lack of exceptions. Go has two substitutes, panics, which are intended only for program ending conditions. And returning error codes. I'll ignore the former, since it isn't intended for general exception use. The latter fundamentally fails because they require the programer to never screw up. The beauty of exceptions is I can add appropriate error handling as I develop software and understand its failure modes, and I'll be alerted very clearly if I miss a case. Consider this python:
with open(path_to_file) as f: line = f.read(100)