Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go Mengendalikan Penunjuk dan Penerima Nilai dalam Kaedah?

Bagaimanakah Go Mengendalikan Penunjuk dan Penerima Nilai dalam Kaedah?

Barbara Streisand
Barbara Streisandasal
2024-11-08 13:37:01273semak imbas

How Does Go Handle Pointer and Value Receivers in Methods?

Penunjuk Go: Penerima dan Jenis Nilai

Dalam Go, penunjuk amat diperlukan untuk memahami pengaturcaraan dan pengurusan memori berorientasikan objek. Apabila berurusan dengan penunjuk, adalah penting untuk memahami perbezaan antara jenis penerima dalam kaedah.

Contoh Go Tour yang anda berikan menggambarkan konsep ini:

type Vertex struct {
    X, Y float64
}

func (v *Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

func main() {
    v := &Vertex{3, 4}
    fmt.Println(v.Abs())
}

Di sini, kaedah Abs menerima penunjuk penerima (*Puncak). Walau bagaimanapun, anda menyedari bahawa anda juga boleh menggunakan penerima nilai (Vertex) dan memperoleh hasil yang sama. Bagaimanakah ini boleh berlaku?

Jenis Penerima dan Nilai

Go membenarkan kaedah terbitan. Kaedah dengan penerima penunjuk boleh mewarisi daripada kaedah dengan penerima nilai. Ini bermakna kaedah penerima nilai, cth., func (v Vertex) Abs() float64, secara automatik menjana kaedah penerima penunjuk:

func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X+v.Y*v.Y) }
func (v *Vertex) Abs() float64 { return Vertex.Abs(*v) }  // GENERATED METHOD

Pengambilan Alamat Automatik

Satu lagi ciri penting ialah pengambilan alamat automatik Go. Pertimbangkan kod berikut tanpa penerima penunjuk yang jelas:

func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X+v.Y*v.Y) }
func main() {
    v := Vertex{3, 4}
    v.Abs()
}

Go secara tersirat mengambil alamat nilai yang dihantar kepada kaedah Abs. Ini bersamaan dengan yang berikut:

vp := &v
vp.Abs()

Kesimpulan

Dalam Go, memahami peranan jenis penerima dan ciri pengambilan alamat automatik adalah penting untuk penggunaan penunjuk yang cekap . Anda boleh memperoleh kaedah penerima penuding daripada kaedah penerima nilai dan Go akan menghantar alamat nilai secara automatik tanpa menggunakan penunjuk secara eksplisit.

Atas ialah kandungan terperinci Bagaimanakah Go Mengendalikan Penunjuk dan Penerima Nilai dalam Kaedah?. 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