Bagaimana untuk menulis semula fungsi dalam golang?

王林
Lepaskan: 2024-04-27 11:15:02
asal
515 orang telah melayarinya

Dalam Go, kaedah mengatasi membenarkan kaedah dalam kelas asas ditakrifkan semula dalam kelas terbitan sambil mengekalkan tandatangan kaedah yang sama: gunakan kata kunci ganti. Kaedah ganti mesti mempunyai tandatangan yang sama dengan kaedah asas. Jenis penerima kaedah yang diganti mestilah subjenis daripada jenis asas.

如何在 golang 中重写函数?

Mengatasi fungsi dalam Go

Mengganti membolehkan kami mentakrifkan pelaksanaan baharu kaedah sedia ada dalam kelas terbitan sambil mengekalkan tandatangan kaedah. Ini membolehkan kami memanjangkan fungsi kelas asas tanpa mengubah antara mukanya.

Syntax

Mengatasi dalam Go menggunakan kata kunci override: override 关键字:

type MyStruct struct {
    baseStruct
}

func (m MyStruct) SomeMethod() {}
Salin selepas log masuk

SomeMethod 方法将重写来自 baseStruct 的同名方法。

注意:

  • 重写的方法必须具有与被重写的基方法相同的签名。
  • 重写方法的接收者类型必须是基类型的子类型。
  • Go 中没有虚拟方法或动态绑定。

实战案例

假设我们有一个 Animal 基类,具有 Speak 方法:

type Animal struct {
    name string
}

func (a Animal) Speak() {
    fmt.Printf("%s speaks!\n", a.name)
}
Salin selepas log masuk

我们可以创建一个 Dog 派生类,该类扩展 Speak 方法以吠叫:

type Dog struct {
    Animal
}

func (d Dog) Speak() {
    fmt.Printf("%s barks!\n", d.name)
}
Salin selepas log masuk

在这里,Dog.Speak 方法重写了 Animal.Speak

package main

import "fmt"

type Animal struct {
    name string
}

func (a Animal) Speak() {
    fmt.Printf("%s speaks!\n", a.name)
}

type Dog struct {
    Animal
}

func (d Dog) Speak() {
    fmt.Printf("%s barks!\n", d.name)
}

func main() {
    a := Animal{name: "Animal"}
    a.Speak() // Output: Animal speaks!

    d := Dog{Animal{name: "Dog"}}
    d.Speak() // Output: Dog barks!
}
Salin selepas log masuk
Kaedah SomeMethod akan menggantikan nama yang sama daripada kaedah baseStruct .

Nota:

🎜
  • Kaedah ganti mesti mempunyai tandatangan yang sama dengan kaedah asas ganti.
  • Jenis penerima kaedah yang diganti mestilah subjenis jenis asas.
  • Tiada kaedah maya atau pengikatan dinamik dalam Go.
🎜🎜Kes praktikal🎜🎜🎜Andaikan kita mempunyai kelas asas Haiwan dengan kaedah Speak: 🎜rrreee🎜Kita boleh mencipta Dog yang memanjangkan kaedah Speak untuk menyalak: 🎜rrreee🎜Di sini, kaedah Dog.Speak mengatasi Haiwan kaedah, menyediakan pelaksanaan khusus Anjing. 🎜🎜🎜Contoh🎜🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk menulis semula fungsi dalam golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan