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
877 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!

sumber:php.cn
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