The code below is really self-explanatory.
How come I can say that the result of CreateLion(), a pointer to a struct that implements the Cat interface, is an instance of
I think you should read this blog http://blog.golang.org/laws-of-reflection,it is precise about the relation between variables,types and interfaces.
In your example *Lion is different with Cat.
*Lion
Cat
You can correct function CreateLion returns from *Lion to Cat.
CreateLion