Rumah > pembangunan bahagian belakang > Golang > Mengapa Kaedah Penunjuk Boleh Dipanggil pada Nilai Bukan Penunjuk dalam Go?

Mengapa Kaedah Penunjuk Boleh Dipanggil pada Nilai Bukan Penunjuk dalam Go?

Patricia Arquette
Lepaskan: 2024-12-27 11:49:11
asal
784 orang telah melayarinya

Why Can Pointer Methods Be Called on Non-Pointer Values in Go?

Kaedah Penunjuk pada Jenis Bukan Penunjuk Dijelaskan

Dalam Go, konvensyen menyatakan bahawa kaedah nilai boleh digunakan pada kedua-dua penunjuk dan nilai, manakala kaedah penunjuk adalah terhad kepada penunjuk. Walau bagaimanapun, pengecualian jelas kepada peraturan ini ialah keupayaan untuk melaksanakan kaedah penuding pada nilai bukan penuding.

Pertimbangkan coretan kod berikut:

package main

import "fmt"

type car struct {
    wheels int
}

func (c *car) fourWheels() {
    c.wheels = 4
}

func main() {

    var c = car{}
    fmt.Println("Wheels:", c.wheels)
    c.fourWheels()
    // Here, a pointer method is invoked on a non-pointer value
    fmt.Println("Wheels:", c.wheels)
}
Salin selepas log masuk

Kod berjaya melaksanakan kaedah penuding fourWheels pada nilai bukan penunjuk c. Ini mungkin kelihatan bercanggah dengan peraturan yang ditetapkan.

Sebenarnya, apabila menggunakan kaedah fourWheels pada nilai bukan penuding c, anda menggunakan tatatanda trengkas. Ungkapan c.fourWheels() adalah bersamaan dengan (&c).fourWheels().

Spesifikasi Go menyatakan: "Jika x boleh dialamatkan dan set kaedah & x mengandungi m, x.m() ialah singkatan untuk ( &x).m()."

Dalam erti kata lain, Go secara tersirat menyahrujuk nilai bukan penuding c untuk mendapatkan penuding kepada ia, yang kemudiannya digunakan sebagai penerima untuk kaedah penunjuk.

Untuk menjelaskan peraturan tentang kaedah penunjuk, ia harus ditafsirkan seperti berikut:

  • Kaedah nilai boleh digunakan pada kedua-dua nilai dan penunjuk.
  • Kaedah penunjuk boleh digunakan pada penunjuk dan, dalam kes tertentu, pada nilai bukan penunjuk, tetapi hanya jika nilai bukan penuding boleh diakses secara tidak langsung melalui penuding.

Atas ialah kandungan terperinci Mengapa Kaedah Penunjuk Boleh Dipanggil pada Nilai Bukan Penunjuk dalam Go?. 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