簡體   English   中英

在Go中初始化結構時使用new vs. {}

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM