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

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

Patricia Arquette
Patricia Arquetteasal
2024-12-18 14:47:10193semak imbas

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

dan

v := new(Vector)

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

Output:

*main.Vector
*main.Vector

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