Rumah > pembangunan bahagian belakang > Golang > ## Mengapa Nilai Boleh Mendapat Kaedah Penunjuk dalam Go?

## Mengapa Nilai Boleh Mendapat Kaedah Penunjuk dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-10-25 23:58:28
asal
569 orang telah melayarinya

## Why Can a Value Invoke a Pointer Method in Go?

Go Receiver Methods Calling Syntax: A Deeper Dive

Dalam panduan "Effective Go", dinyatakan bahawa kaedah penunjuk hanya boleh digunakan pada penunjuk, manakala kaedah nilai boleh digunakan pada penunjuk atau nilai. Walau bagaimanapun, pertemuan baru-baru ini menimbulkan persoalan: mengapa nilai menggunakan kaedah penuding dalam kod berikut?

<code class="go">package main

import (
  "fmt"
)

type age int

func (a age) String() string {
  return fmt.Sprintf("%d yeasr(s) old", int(a))
}

func (a *age) Set(newAge int) {
  if newAge >= 0 {
    *a = age(newAge)
  }
}

func main() {
  var vAge age = 5
  pAge := new(age)
  vAge.Set(10) // Compilation successful
}</code>
Salin selepas log masuk

Untuk menyelesaikannya, kita beralih kepada spesifikasi bahasa Go. Di bawah "Panggilan", tertera:

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

Dalam kes kami, vAge boleh dialamatkan (penukaran jenis kepada *umur adalah sah), jadi vAge.Set(10) pada asasnya adalah (&vAge).Set(10). Oleh kerana jenis penerima Set() ialah penunjuk, inilah sebabnya nilai vAge boleh menggunakan kaedah penunjuk Set().

Atas ialah kandungan terperinci ## Mengapa Nilai Boleh Mendapat Kaedah 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