Go doesn’t have a dispatch table, but interface values. It’s literally more of a freestyle dispatcher mechanism that requires some work during interface value assignment — it generates a tiny lookup hash-table for the concrete type it’s pointing to. The assignment is not insanely expensive, so it’s a fair exchange for a more pleasant type system. Ian Lance Taylor has a great blog post about the internals if you’re looking for further reading.
Yes it does have a dispatch table, and the linked post says it too:
The table of functions is stored sorted by the name of the method, although the name does not appear in the table. Calling a method on an interface means calling a specific entry in this table, where the entry to call is known at compile time. Thus the table of functions is essentially the same as a C++ virtual function table, and calling a method on an interface requires the same series of steps as calling a C++ virtual function: load the address of the virtual table, load a specific entry in the table, and call it.
It’s the case of gccgo maybe not go native compiler
If one wants run-time subtyping, one have no choice but to include a dispatch table.
You should point it out in the Medium post so that she can correct it. I doubt she’ll see it here :).
I saw it and made it clearer.
The post should have said Go doesn’t have a traditional dispatch table, the ivalue mechanism I’m explaining is also dispatching. I made it more obvious.
The point of the Go’s type system is the way it organizes the table, a method via an interface has its own entry that’s not associated with a parent type.