Membezakan Peruntukan "baru()" dan "Biasa" dalam Go
Dalam Go, terdapat dua kaedah untuk memperuntukkan memori: menggunakan fungsi "new()" atau melaksanakan peruntukan "biasa" melalui operator ampersand "&". Walaupun kedua-dua pendekatan mungkin kelihatan serupa, ia menjana hasil yang berbeza.
Memahami "new()"
Fungsi "new()" memperuntukkan nilai baru yang tidak dimulakan jenis yang ditentukan dan mengembalikan penunjuk kepada nilai tersebut. Apabila "new()" dipanggil, memori diperuntukkan pada timbunan menggunakan "malloc". Tidak seperti peruntukan "biasa", "new()" memulakan memori kepada nilai sifar untuk jenis yang ditentukan.
Memahami Peruntukan Biasa melalui "&"
"Regular " peruntukan menggunakan operator "&" untuk mendapatkan penunjuk kepada nilai sedia ada. Kaedah ini memperuntukkan memori pada tindanan dan menetapkan penunjuk yang dikembalikan kepada alamat memori yang diperuntukkan. Peruntukan "biasa" tidak memulakan memori, meninggalkannya dengan nilai yang tidak dimulakan.
Perbezaan dalam Amalan
Perbezaan utama antara "baru()" dan "biasa" peruntukan terletak pada permulaan memori yang diperuntukkan. "new()" memulakan memori kepada nilai sifar, memastikan bahawa data sentiasa boleh diramal. Sebaliknya, peruntukan "biasa" meninggalkan memori tanpa dimulakan, memerlukan permulaan yang jelas sebelum digunakan.
Pertimbangan Penggunaan
Pilihan antara "baru()" dan "biasa" peruntukan bergantung pada kes penggunaan tertentu. "new()" lebih disukai apabila berurusan dengan struct atau struktur data kompleks yang memerlukan keadaan awal yang boleh diramal. Peruntukan "biasa" boleh menjadi lebih cekap untuk jenis data ringkas seperti integer atau terapung yang boleh dimulakan secara langsung.
Contoh
Contoh berikut menggambarkan perbezaan antara "baharu ()" dan biasa peruntukan:
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
Seperti yang ditunjukkan, kedua-dua "new()" dan "&" mengembalikan penunjuk kepada objek Vektor. Walau bagaimanapun, "new()" telah memulakan nilai Vektor kepada sifar, manakala peruntukan "&" tidak.
Atas ialah kandungan terperinci Pergi Peruntukan Memori: Apakah Perbezaan Antara `new()` dan `&`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!