## Mengapa Nilai Boleh Mendapat Kaedah Penunjuk dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-10-25 23:58:28
asal
427 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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!