Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Go Mengendalikan Panggilan Kaedah dengan Penerima Objek Apabila Kaedah Mempunyai Penerima Penunjuk?

Bagaimanakah Go Mengendalikan Panggilan Kaedah dengan Penerima Objek Apabila Kaedah Mempunyai Penerima Penunjuk?

Mary-Kate Olsen
Lepaskan: 2024-12-23 18:47:12
asal
525 orang telah melayarinya

How Does Go Handle Method Calls with Object Receivers When the Method Has a Pointer Receiver?

Panggilan Kaedah dengan Penerima Objek Berbanding Penunjuk

Dalam Go, kaedah boleh ditakrifkan untuk jenis dengan penerima nilai (bukan penunjuk) atau penuding penerima (penunjuk). Apabila memanggil kaedah dengan penerima penuding oleh objek, Go secara automatik mentafsir panggilan seolah-olah ia dibuat pada penuding ke objek.

Sebagai contoh, pertimbangkan kod berikut:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

package main

 

import (

    "fmt"

    "math"

)

 

type Vertex struct {

    X, Y float64

}

 

func (v Vertex) Abs() float64 {

    return math.Sqrt(v.X*v.X + v.Y*v.Y)

}

 

func (v *Vertex) Scale(f float64) {

    v.X = v.X * f

    v.Y = v.Y * f

}

 

func main() {

    v := Vertex{3, 4}

    v.Scale(10) // Calling a method with a pointer receiver using an object

    fmt.Println(v.Abs())

}

Salin selepas log masuk

Di sini, kami mempunyai jenis Vertex dengan kedua-dua kaedah nilai dan penerima penunjuk. Dalam fungsi utama, kami mencipta objek Vertex v dan kemudian memanggil kaedah Skala padanya. Biasanya, kaedah Skala menjangkakan penerima penunjuk, tetapi dalam kes ini, kami menggunakan objek.

Pengkompil menyedari bahawa v boleh ditangani dan set kaedahnya termasuk Skala. Mengikut spesifikasi Go:

"Panggilan kaedah x.m() adalah sah jika set kaedah (jenis) x mengandungi m dan senarai argumen boleh diberikan kepada senarai parameter m. Jika x boleh dialamatkan dan set kaedah &x mengandungi m, x.m() ialah singkatan untuk (&x).m()."

Oleh itu, panggilan v.Scale(10) ialah ditafsirkan sebagai (&v).Skala(10), yang secara berkesan menghantar penunjuk ke objek v kepada kaedah Skala. Ini membenarkan kaedah untuk mengubah suai medan X dan Y objek seperti yang dijangkakan.

Atas ialah kandungan terperinci Bagaimanakah Go Mengendalikan Panggilan Kaedah dengan Penerima Objek Apabila Kaedah Mempunyai Penerima Penunjuk?. 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