[英]using new vs. { } when initializing a struct in Go
所以我知道你可以在GO中以兩種不同的方式初始化結構。 其中一個是使用new關鍵字,它返回一個指向內存中結構的指針。 或者您可以使用{}來構建結構。 我的問題是什么時候適合使用每個? 謝謝
當已知類型的完整值時,我更喜歡{}
,而當將逐步填充值時,我更喜歡new()
。
在前一種情況下,添加新參數可能涉及添加新的字段初始值設定項。 在后者中,它應該被添加到組成該值的任何代碼中。
請注意,僅當T
是結構,數組,切片或地圖類型時,才允許使用&T{}
語法。
關於@Volker所說的,通常最好使用&A{}
作為指針(並且這不一定必須是零值:如果我有一個包含單個整數的結構,我可以做&A{1}
初始化字段)。 除了風格問題外,人們通常更喜歡這種語法的一個重要原因是,與新的不同,它並不總是實際上在堆中分配內存。 如果go編譯器可以確定指針永遠不會在函數之外使用,它只會將結構體分配為局部變量,這比調用new更有效。
大多數人使用A{}
來創建type A
的零值, &A{}
來創建指向type A
的零值的指針。 使用new
只對int
有必要,就像int{}
是不行的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.