Suppose I have the following type definitions:
type ICat interface {
Meow() string
}
type Cat struct {
Name string
}
func (c Cat) Meow() string {
return "Meow"
}
When I perform this operation:
var a Cat
a.Name = "Tom"
A struct of type Cat is allocated in memory and one of its fields gets assigned.
But, if perform the following operation:
var b ICat
What is exactly being allocated in memory? is a Golang Interface just an struct that holds a pointer to another struct? a "Boxed pointer"?.
An interface holds two things:
So, when you declare
var b ICat
b
contains those two elements.
When you do:
b := Cat{}
b
now contains a pointer to a copy of Cat{}
, and the fact that the data is a struct Cat
.
When you do:
b := &Cat{}
b
now contains a copy of the pointer to Cat{}
, and the fact that it is a *Cat
.