在下面的代码片段中,我想了解iPerson当其内容仍未初始化时究竟存储了什么:只是一个 0 字节的值?或者它实际上是引擎盖下的指针(当然也初始化为 0 字节)?在任何情况下,究竟发生了iPerson = person什么?
如果iPerson = person复制person,那么当一个实现IPerson但具有不同大小/内存占用的对象被分配给 时会发生iPerson什么?我的理解iPerson是一个存储在堆栈上的变量,所以它的大小必须是固定的。这是否意味着堆实际上是在底层使用的,所以iPerson实际上是作为指针实现的,但赋值仍然复制对象,如上面的代码所示?这是代码:
type Person struct{ name string }
type IPerson interface{}
func main() {
var person Person = Person{"John"}
var iPerson IPerson
fmt.Println(person) // => John
fmt.Println(iPerson) // => <nil> ...so looks like a pointer
iPerson = person // ...this seems to be making a copy
fmt.Println(iPerson) // => John
person.name = "Mike"
fmt.Println(person) // => Mike
fmt.Println(iPerson) // => John ...so looks like it wasn't a pointer,
// or at least something was definitely copied
}
吃鸡游戏
哆啦的时光机
相关分类