回答
號返回什麼內容是一樣的,
package main
import "fmt"
import "reflect"
type Vector struct {
x int
y int
}
func main() {
v := &Vector{}
x := new(Vector)
fmt.Println(reflect.TypeOf(v))
fmt.Println(reflect.TypeOf(x))
}
結果:
*main.Vector
*main.Vector
有郵件列表上的一些論點,即同時具有令人困惑:
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/GDXFDJgKKSs
有一點需要注意:
新的()是獲得一個指向 的唯一途徑未命名的整數或其他基本類型。你可以寫「p:= new(int)」,但是你不能寫「p:= & int {0}」。除此之外,這是一個 的優先事項。
來源:https://groups.google.com/d/msg/golang-nuts/793ZF_yeqbk/-zyUAPT-e4IJ
我想他們可以支持'p:=&0',如果他們想保持關鍵字倒數。 –
在本例中這兩個值將在堆上分配。 Go不像C,你可以明確地確定內存分配的位置。 Go在編譯時執行「逃逸分析」,並在必要時在堆上分配內存。據我所知,如果你曾經參考過一個對象的地址,它將被分配到堆上。由於v := &Vector{}
正在將Vector{}
的地址分配給v
,因此編譯器將決定將此需求分配到堆上。
根據Effective Go,new()
是分配內存並將其清零的函數;即每個字段(以及該結構的整個內存)將被設置爲0
s。如果你設計的結構,以便當他們創建時,所有字段應該等於零,比它的罰款,並建議使用它。但是,如果您需要更多地控制要使用的初始值,則應使用更傳統的方法。
在具體的情況下,你提到的差異是無關緊要的,但它應該在別處註明。
我希望這有助於! :)
是的,這兩個代碼片段之間存在根本差異。
v := &Vector{}
作品僅爲Vector
是一個結構類型,圖型,陣列型或片型
v := new(Vector)
Works爲的任何類型Vector
。
說'新(地圖)'不是一個好主意,但:http://play.golang.org/p/u89EYchY5n - 地圖,切片和頻道必須由'make()'製作,並且因爲它們是參考無論如何,使用new()來表示它們毫無意義。 –
這不是'new'的問題。實際上'new(anyType)'沒有錯:http://play.golang.org/p/e3hmtK_IV8 – zzzz
你是對的,但它仍然毫無意義,因爲'map'已經是一個指針了,所以make()是正確的使用,而不是'new()'。 –
- 1. 配置單元中的分區和分區有什麼區別?
- 2. ()和[]動態分配有什麼區別?
- 3. object_id和常規ID之間的區別
- 4. 演員和強類型分配有區別嗎?
- 5. 通過e.id = X和e.attr(「id」,X)分配新ID有什麼區別嗎?
- 6. 分區和分層術語有任何區別嗎?
- 7. Malloc和新運算符分配內存有什麼區別?
- 8. 區分新的和現有的異常
- 9. ^2和^ 2L有區別嗎?
- 10. MsgBox和MessageBox.Show有區別嗎?
- 11. _xx.html和xx.html有區別嗎?
- 12. gluLookAt()和glFrustum()有區別嗎?
- 13. LDAP和CRL有區別嗎?
- 14. SSLv3和TLS1.0有區別嗎?
- 15. GLubyte和GL_UNSIGNED_BYTE有區別嗎?
- 16. Rect3D.SizeX和Rect3D.Size.X有區別嗎?
- 17. int *和Type *有區別嗎?
- 18. sass和scss有區別嗎?
- 19. DictionarySectionHandler和NameValueSectionHandler有區別嗎?
- 20. 「Build」和CI有區別嗎?
- 21. YARN和MR2有區別嗎?
- 22. 分配null和不分配null有什麼區別?
- 23. - 有區別嗎?
- 24. 有區別嗎?
- 25. valgrind和常規C++運行之間有什麼區別
- 26. 回調函數和常規函數有什麼區別?
- 27. Windows服務和常規應用程序有什麼區別?
- 28. 常規的Rails應用程序和Rails API有什麼區別?
- 29. 「常規」和「讀者」宏之間有什麼區別?
- 30. 「路徑規劃」和「尋路」有區別嗎?
的可能重複[進入:?我爲什麼會做()或新的()](http://stackoverflow.com/questions/9320862/go-why-would-i-make - 或 - 新) –