如何在Go中初始化一个指向结构的指针的类型?

Mat*_*att 1 struct types pointers initialization go

例如:

type Foo struct {
        x int
}
var foo *Foo = &Foo{5}

type Bar *struct {
        x int
}
var bar Bar = ??
Run Code Online (Sandbox Code Playgroud)

我该如何初始化bar

我意识到有一个解决方法:

type Bar *Foo
var bar Bar = &Foo{5}
Run Code Online (Sandbox Code Playgroud)

但我想避免这种情况.

Jim*_*imB 5

[可能]没有理由使用该表格type Bar *struct.该类型是一个指向匿名结构的指针,因此您必须使用匿名结构初始化它(或者当您指出时,它是一个等效的可转换结构类型).

var b Bar = &struct{x int}{}
// or
b := Bar(&Foo{})
Run Code Online (Sandbox Code Playgroud)

声明基本上是相同的

type Bar *Foo
Run Code Online (Sandbox Code Playgroud)

这可能会让你更清楚自己想做什么.

但同样,这是非惯用的,你可能会在团队设置或公共界面中遇到阻力(即我个人不会通过这是代码审查)

  • @Matt:好的一点,几乎总有例外;)虽然我不认为这是走这条道路的正当理由.你试图以一种非常惯用的方式隐藏指针,我冒昧地说它会变得笨拙且难以维护.从指针切换到值接收器通常是一个非常快速的重构器.编译器会准确地告诉您要更改的行. (2认同)
  • @matt,这就是我所说的.编译器会告诉你它们在哪里(也许某些编辑器/ IDE插件也会这样做?).此外,由于可寻址性和自动引用/解除引用,许多不需要更改http://play.golang.org/p/uImXTAh6Ll (2认同)