Rumah > pembangunan bahagian belakang > Golang > Pergi Permulaan: `&` lwn. `new()`: Apakah Perbezaannya?

Pergi Permulaan: `&` lwn. `new()`: Apakah Perbezaannya?

Patricia Arquette
Lepaskan: 2024-12-18 14:47:10
asal
285 orang telah melayarinya

Go Initialization:  `&` vs. `new()`: What's the Difference?

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

dan

v := new(Vector)
Salin selepas log masuk

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

Output:

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

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!

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