Why Go is a poorly designed language
Ian Byrd
6122

First, I agreed some of your points. However, regarding the purposes of the language design, there are some ideas I need to point out.

Reason #2: Well, interface{} type conceptually has two values underlying it. So to put it simply, you just think of it as composed of a type and a value.

  • The type represents the concrete type of the struct satisfies the interface.
  • The value will points to the value of the struct.

An interface{} variable has a nil value when the type and the value are both nil. In the given code: Generate() returns a nil *MagicError type. then this type is casted into error. Hence, error interface now has a concrete type: *MagicError and a value : nil. The interface{} is not nil! Ta-da !

Reason #3: OK, I don’t get your points here. But this is a normal concept… What are your ideas anyway?

Reason #4: A slice of interface type is not a slice of concrete type. We cannot cast a slice of concrete type to a slice of interface directly. Still, we can cast a concrete type to an interface type (like being said in reason 2)

Let me give you another simpler example to illustrate your point: 
Try to cast a slice of FancyInt of yours to a slice of int and see whether it works or not.

Here is the playground code: http://play.golang.org/p/waeDTc_8wN

Reason #5: Well nothing to say about this. It’s normal to me.

Reason #6: So, Go is designed for the sake of software engineer, it is developed to solve problems at Google. And unused import, circular import… are some of those problems with the C/C++ programming language there. Carefully designing and importing the package can help reduce compilation time as with C/C++, same as with go. Also, the executable ,after the linking process, might potentially not be as large as it’s supposed to be with uneccessarily linked packages. Man, don’t be lazy!

And the colon, semicolon stuffs has to do with the way the compiler adds semicolon at compiling time. A colon is a mechanism to signal the compiler to not put a semicolon there.

Reason #7: Well, I never use this feature before, so I have nothing to say.

I have one question: Why do you put so much hate on Rob Pike?