Permulaan Nilai dalam Go
Dalam Go, menggunakan & untuk memulakan nilai berbanding menggunakan new() mungkin kelihatan seperti pendekatan yang berbeza, tetapi pendekatannya fungsi pada asasnya adalah sama.
Menggambarkan Kesetaraan
Pertimbangkan coretan kod berikut:
v := &Vector{}
dan
v := new(Vector)
Di sini, Vektor mewakili jenis tersuai. Kedua-dua pendekatan memperuntukkan memori untuk struct Vector dan mengembalikan penunjuk kepada memori yang diperuntukkan.
Untuk menunjukkan kesetaraan ini, mari kita bandingkan jenis yang terhasil:
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)) }
Output:
*main.Vector *main.Vector
Sebagai видно, kedua-dua kaedah menghasilkan penunjuk kepada Vektor taip.
Latar Belakang dan Keutamaan Sejarah
Walaupun kedua-dua kaedah mencapai hasil yang sama, sejarah masing-masing mungkin mempengaruhi pilihan pembangun. new() telah diperkenalkan lebih awal dalam pembangunan Go dan merupakan satu-satunya cara untuk memulakan penunjuk kepada jenis asas seperti integer. Sejak itu, & telah ditambah sebagai pendekatan yang lebih umum yang berfungsi untuk sebarang jenis.
Kesimpulan
Akhirnya, pilihan antara & dan new() adalah satu perkara keutamaan. Kedua-dua pendekatan memperuntukkan memori dan mengembalikan penunjuk kepada memori yang diperuntukkan, menghasilkan kefungsian yang sama.
Atas ialah kandungan terperinci Pergi Permulaan: `&` lwn. `new()`: Apakah Perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!