Rumah > pembangunan bahagian belakang > Golang > Pergi Peruntukan Memori: `new()` vs `&{}` – Apakah Perbezaan Sebenar?

Pergi Peruntukan Memori: `new()` vs `&{}` – Apakah Perbezaan Sebenar?

Mary-Kate Olsen
Lepaskan: 2024-12-16 22:15:18
asal
968 orang telah melayarinya

Go Memory Allocation: `new()` vs `&{}` – What's the Real Difference?

Teka-teki Peruntukan: new() lwn Penunjuk "Biasa" dalam Go

Dalam bidang pengaturcaraan Go, timbul persoalan: adakah terdapat perbezaan ketara antara dua segmen kod berikut apabila memperuntukkan memori untuk objek baharu?

Segmen Kod 1:

v := &Vector{}
Salin selepas log masuk

Kod Segmen 2:

v := new(Vector)
Salin selepas log masuk

Jawapan:

Anehnya, ada tiada perbezaan ketara antara kedua-dua segmen kod. Kedua-duanya mencapai hasil yang sama: mencipta penuding kepada contoh baharu jenis Vektor.

Penjelasan Terperinci:

Apabila memanggil baharu(Vektor), kata kunci baharu memperuntukkan memori untuk objek Vektor baharu dan mengembalikan penunjuk kepada objek itu. Begitu juga, &Vector{} juga memperuntukkan memori untuk objek Vektor baharu dan mengembalikan penunjuk kepadanya.

Untuk menggambarkan, pertimbangkan kod berikut:

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))
}
Salin selepas log masuk

Output:

*main.Vector
*main.Vector
Salin selepas log masuk

Seperti yang anda lihat, kedua-dua v dan x adalah penunjuk kepada objek Vektor. Mereka mempunyai jenis yang sama.

Kes Penggunaan:

Walaupun kedua-dua segmen kod mencapai hasil yang sama, sesetengah pembangun berpendapat bahawa baharu adalah lebih sesuai apabila memori yang diperuntukkan akan serta-merta dinyahrujuk dan digunakan, kerana ia membantu mengelakkan ralat rujuk dua kali. Contohnya:

// Allocates memory and immediately dereferences it
v := new(Vector).x
Salin selepas log masuk

Kesimpulan:

Kesimpulannya, pilihan antara menggunakan baharu dan sintaks peruntukan "biasa" dalam Go semata-mata bergantung kepada keutamaan peribadi. Kedua-dua kaedah memperuntukkan memori dan mengembalikan penunjuk kepada objek yang baru dibuat, menawarkan kefungsian yang sama.

Atas ialah kandungan terperinci Pergi Peruntukan Memori: `new()` vs `&{}` – Apakah Perbezaan Sebenar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan