The challenge is that one needs to "find out" a type at design time - not runtime.
I spent a year coding in Go. It was fun, once I learned the idiosyncracies - such as the fact that the way that it treats paramaters is different from the way that it treats the target object, and that one can check for null in one context and have it return false, but in another context it returns true. But I also spent a great deal of time trying to decipher the Go code of others and that was a nightmare.
I believe that Go was an experiment that escaped the lab, and now people are using it for real things, but it is not really fit for purpose. Go is fun, and it has upsides, but there are far better choices if one wants to write code that is understandable by others, and that is not full of minefields for new developers.
But alas you are right, it is fun to use! :-)