Saya masih bingung mengapa kita harus new
pergi.
Ketika Anda ingin instantiate sebuah struct, Anda lakukan
t := Thing{}
dan Anda bisa mendapatkan pointer ke instance baru dengan melakukan
t := &Thing{}
Tetapi ada juga kemungkinan ini:
t := new(Thing)
Yang terakhir ini tampaknya agak asing bagi seluruh bahasa. &Thing{}
sejelas dan sesingkat new(Thing)
itu dan hanya menggunakan konstruksi yang sering Anda gunakan di tempat lain. Ini juga lebih dapat diperluas karena Anda dapat mengubahnya ke &Thing{3}
atau &Thing{Feets:7}
.
Menurut pendapat saya, memiliki kata kunci tambahan 1 mahal, itu membuat bahasa lebih kompleks dan menambah apa yang harus Anda ketahui. Dan itu mungkin menutupi untuk pendatang baru apa yang ada di balik instantiating sebuah struct.
Itu juga membuat satu kata lagi dilindungi.
Jadi apa alasan di baliknya new
? Apakah terkadang bermanfaat? Haruskah kita menggunakannya?
1 : Ya, saya tahu itu bukan kata kunci di tingkat tata bahasa, Anda bisa membayangi , tetapi itu tidak mengubah fakta itu, untuk pengembang yang masuk akal, kata yang dilindungi undang-undang.
Jawaban:
Cara terbaik untuk bertanya mungkin kepada orang-orang yang mengerjakannya; persis apa yang saya lakukan !
Tl; dr: awalnya ada di sana sebelum
make
dan&{}
, dan masih berfungsi untuk digunakan dalam beberapa situasi.Pada dasarnya, inilah bagian terpenting yang dikutip:
Setelah jawaban lain yang menunjukkan solusi semacam ini:
Saya meminta klarifikasi lebih lanjut:
Itu juga ada sebagian besar karena alasan historis:
sumber
v := &(0)
dan melewatkan variabel temp? (Saya tidak tahu Go.)0
adalah konstanta literal, Anda tidak dapat mengambil alamatnya. Masalah akan terjadi jika Anda ingin jenis tertentu juga. Itu sebabnya sintaks menyukai&int
atau&int(0)
mungkin berguna (meskipun tidak banyak berpikir tentang sintaks terbaik). Tetapi melakukannya dalam dua baris seperti yang ditunjukkan Collins juga baik-baik saja (vv := 0; v := &vv
).Go 2
dianggap berbahaya.