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

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-16 22:15:18878semak imbas

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{}

Kod Segmen 2:

v := new(Vector)

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))
}

Output:

*main.Vector
*main.Vector

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

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:
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