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

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