gpt4 book ai didi

pointers - 在指针方法 Go 中初始化指针接收器

转载 作者:IT王子 更新时间:2023-10-29 00:36:10 25 4
gpt4 key购买 nike

如何使用指针方法初始化指针接收器?

package main

import "fmt"

type Person struct {
name string
age int
}

func (p *Person) Born() {

if nil == p {
p = new(Person)
}

}

func main() {

var person *Person
person.Born()
if person == nil {
fmt.Println("This person should be initialized. Why is that not the case?")
}
fmt.Println(person)
}

在调用作为指针接收器的 .Born() 方法后,人们会期望 person 被初始化(清零)。但事实并非如此。有人可以阐明这一点吗?

最佳答案

One would expect person to be initialized (zeroed) after calling .Born() method which is a pointer receiver.

调用接收器上的方法假定接收器已经初始化。

所以你需要初始化它:

var person *Person
person = &Person{} // Sets the pointer to point to an empty Person{} struct

或者在一条语句中:

var person = &Person{}

或速记:

person := &Person{}

您预期的自初始化失败的原因:

func (p *Person) Born() {
if nil == p {
p = new(Person)
}
}

你对 p 的新赋值是在 Born() 函数范围内,所以在函数之外它没有任何效果。

关于pointers - 在指针方法 Go 中初始化指针接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42855240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com