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

Bolehkah Kaedah Penunjuk Dipanggil pada Nilai Bukan Penunjuk dalam Go?

Patricia Arquette
Lepaskan: 2024-12-19 22:24:13
asal
618 orang telah melayarinya

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

Kaedah Penunjuk pada Jenis Bukan Penunjuk

Jawapan kepada soalan sebelumnya menyatakan bahawa kaedah penunjuk hanya boleh digunakan pada penunjuk. Walau bagaimanapun, ini nampaknya tidak betul, seperti yang ditunjukkan oleh kod berikut yang berjaya memanggil kaedah penuding pada nilai bukan penuding:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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

    fmt.Println("Wheels:", c.wheels)

}

Salin selepas log masuk

Penjelasan

Penerangan kunci untuk memahami tingkah laku ini terletak pada hakikat bahawa penerima kaedah adalah penunjuk. Apabila anda memanggil c.fourWheels(), nilai penerima, c, adalah bukan penuding. Walau bagaimanapun, memandangkan jenis penerima ialah penunjuk, ini ditafsirkan sebagai singkatan untuk (&c).fourWheels().

Mengikut spesifikasi Go, apabila memanggil kaedah, jika nilai penerima boleh dialamatkan dan jenis penerima adalah penunjuk, panggilan kaedah ditafsirkan sebagai panggilan kaedah penunjuk. Dalam kes kami, nilai penerima c boleh dialamatkan dan jenis penerima *kereta ialah penunjuk, jadi panggilan kaedah c.fourWheels() secara berkesan memanggil (&c).fourWheels().

Tingkah laku ini ialah konsisten dengan pernyataan bahawa kaedah nilai boleh digunakan pada penunjuk dan nilai, manakala kaedah penunjuk hanya boleh digunakan pada penunjuk. Dalam kes kaedah penunjuk, jika nilai penerima bukan penunjuk, ia mesti dinyahrujuk untuk mendapatkan nilai penunjuk yang boleh digunakan sebagai penerima.

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