所以我知道你可以在GO中以两种不同的方式初始化结构。其中一个是使用new关键字,它返回一个指向内存中结构的指针。或者您可以使用{}来构建结构。我的问题是什么时候适合使用每个? 感谢
答案 0 :(得分:10)
当已知类型的完整值时,我更喜欢{}
,而当要逐步填充值时,我更喜欢new()
。
在前一种情况下,添加新参数可能涉及添加新的字段初始值设定项。在后者中,它应该被添加到组成该值的任何代码中。
请注意,仅当&T{}
是结构,数组,切片或地图类型时才允许使用T
语法。
答案 1 :(得分:8)
关于@Volker所说的,通常最好使用&A{}
作为指针(并且这不一定是零值:如果我有一个包含单个整数的结构,我可以执行&A{1}
初始化字段)。除了风格问题外,人们通常更喜欢这种语法的一个重要原因是,与新的不同,它并不总是实际上在堆中分配内存。如果go编译器可以确定指针永远不会在函数之外使用,它只会将结构体分配为局部变量,这比调用new更有效。
答案 2 :(得分:7)
大多数人使用A{}
创建零值type A
,&A{}
来创建指向零值type A
的指针。仅new
才需要使用int
,而int{}
就像{{1}}一样。