在其方法中填充一个 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
指针的引用,因为它没有指向任何东西;没有为其分配内存,您的应用程序将崩溃。
我不知道这在 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
指针的引用,因为它没有指向任何东西;没有为其分配内存,您的应用程序将崩溃。