在其方法中填充一个 nil 结构

Populate a nil struct inside its method

我不知道这在 Go 中是否可行,但是如果我在 nil 结构上调用方法,有没有办法填充它?

这是我正在尝试做的事情:

type A struct { 
    Name string
}

func (a *A) DoStuff() {
    if a == nil {
        a = &A{Name: "hello"}
    }
}

func main() {
    var a *A
    a.DoStuff()
    println(a.Name) // want "hello"
}

但上面的内容并未使用 A{} 的实例填充 a,这可能是预期的。

是否有一些技巧可以做到这一点,还是根本不可能?

提前致谢!

TL;DR,你不能。在您的方法中, a 是局部变量。当你这样做时:

a := &A{}

您正在用指向新结构的新指针覆盖局部变量。您想要的是将 现有指针 覆盖为新结构。这样做的唯一方法是取消引用指针:

*a := A{}

但是你不能取消对 nil 指针的引用,因为它没有指向任何东西;没有为其分配内存,您的应用程序将崩溃。