What are the NO's in GO design?
Here's is a list I found amusing from the official FAQ [1].
- No ternary testing operation
?:
- No generic types
- No exceptions
- No assertations
- No
implements
for interface - No algebraic types
- No pointer arithmetic
- No semicolons and no opening brace on the next line
- No implicit numeric conversions
- No untagged unions, as in C
- No overloading of methods and operators
- No type inheritance
It seems like a long list of No's. Whether or not Go is a good decedent of C or it is trying to redefining itself it up to readers' judge. However, according to the Go designers [2],
Every language contains novel features and omits someone's favorite feature. Go was designed with an eye on felicity of programming, speed of compilation, orthogonality of concepts, and the need to support features such as concurrency and garbage collection. Your favorite feature may be missing because it doesn't fit, because it affects compilation speed or clarity of design, or because it would make the fundamental system model too difficult.
If it bothers you that Go is missing feature X, please forgive us and investigate the features that Go does have. You might find that they compensate in interesting ways for the lack of X.