Rumah >pembangunan bahagian belakang >Golang >Belajar kaedah kelas bahasa dan kaedah objek dari awal

Belajar kaedah kelas bahasa dan kaedah objek dari awal

WBOY
WBOYasal
2024-04-03 11:03:02977semak imbas

Dalam Go, perbezaan utama antara kaedah kelas dan kaedah objek ialah penerimanya: kaedah kelas dipanggil dengan nama kelas, manakala kaedah objek memerlukan rujukan contoh. Kaedah kelas sesuai untuk operasi global, dan kaedah objek sesuai untuk operasi contoh tertentu. Langkah: Kaedah kelas: pengisytiharan kata kunci func, diletakkan dalam definisi jenis, dan penerima ialah kelas itu sendiri. Kaedah objek: pengisytiharan kata kunci func, diletakkan di bahagian penerima func bagi definisi jenis, dan penerima ialah penunjuk contoh.

Belajar kaedah kelas bahasa dan kaedah objek dari awal

Bahasa Go: Pelajari kaedah kelas dan kaedah objek dari awal

Dalam bahasa Go, kita boleh menggunakan kaedah kelas dan kaedah objek untuk melaksanakan gelagat objek. Artikel ini akan membimbing anda langkah demi langkah melalui perbezaan antara kedua-dua kaedah dan cara menggunakannya.

Kaedah Kelas

Kaedah kelas ialah kaedah yang terikat kepada kelas itu sendiri. Mereka boleh dipanggil terus dengan nama kelas tanpa membuat contoh kelas. Dalam Go, kami mengisytiharkan kaedah kelas menggunakan kata kunci func dan meletakkannya di dalam definisi type. func 关键字声明类方法,并将其放在 type 定义中。

type Person struct {
    Name string
}

func (p Person) Greet() {
    fmt.Println("Hello, my name is " + p.Name)
}

上面的示例定义了一个 Person 类型和与之关联的 Greet 类方法。我们可以使用 Person.Greet 直接调用此方法,而无需创建 Person 实例。

对象方法

对象方法是与类实例相关的方法。它们只能通过实例调用,不能通过类名直接调用。在 Go 中,我们也使用 func 关键字声明对象方法,但我们会将其放入 type 定义的 func 接收器部分中。

type Person struct {
    Name string
}

func (p *Person) SetName(name string) {
    p.Name = name
}

上面的示例定义了一个 Person 类型和一个名为 SetName 的对象方法。此方法需要一个 Person 指针作为接收器,这意味着它只能通过 Person 实例调用。

实战案例

以下是一个使用类方法和对象方法的 Go 程序示例:

package main

import "fmt"

type Person struct {
    Name string
}

func (p Person) Greet() {
    fmt.Println("Hello, my name is " + p.Name)
}

func (p *Person) SetName(name string) {
    p.Name = name
}

func main() {
    person := Person{Name: "John Doe"}

    person.Greet()
    person.SetName("Jane Doe")
    person.Greet()
}

在这个程序中,我们定义了一个 Person 类型及其关联的类方法 Greet 和对象方法 SetName。我们创建了一个 Person 实例 person,并使用其 Greet 方法和 SetName 方法对其进行操作。

关键区别

类方法和对象方法之间的主要区别在于它们的接收器:

  • 类方法有一个隐式的 typerrreee
  • Contoh di atas mentakrifkan jenis Orang dan kaedah kelas Greet yang berkaitan. Kami boleh memanggil kaedah ini terus menggunakan Person.Greet tanpa membuat contoh Orang.
  • Kaedah objek
  • Kaedah objek ialah kaedah yang berkaitan dengan kejadian kelas. Mereka hanya boleh dipanggil melalui contoh, bukan secara langsung melalui nama kelas. Dalam Go, kami juga mengisytiharkan kaedah objek menggunakan kata kunci func, tetapi kami meletakkannya dalam bahagian penerima func definisi type .
rrreee

Contoh di atas mentakrifkan jenis Orang dan kaedah objek bernama SetName. Kaedah ini memerlukan penunjuk Orang sebagai penerima, yang bermaksud ia hanya boleh dipanggil daripada contoh Orang.

🎜Kes praktikal🎜🎜Berikut ialah contoh program Go menggunakan kaedah kelas dan kaedah objek: 🎜rrreee🎜Dalam atur cara ini, kami mentakrifkan jenis Orang dan kaedah kelas yang berkaitan Greet dan kaedah objek SetName. Kami mencipta contoh Orang orang dan mengendalikannya menggunakan kaedah Greet dan kaedah SetNamenya. 🎜🎜Perbezaan Utama🎜🎜Perbezaan utama antara kaedah kelas dan kaedah objek ialah penerimanya: 🎜
    🎜🎜Kaedah kelas 🎜 mempunyai penerima jenis tersirat yang membolehkan mereka lulus Nama kelas dipanggil secara langsung. 🎜🎜🎜Kaedah objek🎜 mempunyai pembolehubah penerima yang mestilah penunjuk jenis itu, yang menjadikannya hanya boleh dipanggil melalui kejadian. 🎜🎜🎜Secara umum, kaedah kelas adalah yang terbaik untuk operasi global, manakala kaedah objek adalah yang terbaik untuk operasi yang digunakan pada kejadian tertentu. 🎜

Atas ialah kandungan terperinci Belajar kaedah kelas bahasa dan kaedah objek dari awal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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