Very to-the-point article. Perhaps, it is worth noting that Go does not support subtyping polymorphism and function overloading.
I.e. Doctor is not of the type Person. And one cannot define add(a T1) and add(a T2).
This was one of the first things that confused me about Go when I started using it.
For me it was easier to think of Go’s interfaces and structs as ADTs rather than traditional objects (ala Smalltalk offsprings)