Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menulis semula fungsi dalam golang?

Bagaimana untuk menulis semula fungsi dalam golang?

王林
王林asal
2024-04-27 11:15:02462semak imbas

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() {}

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

注意:

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

实战案例

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

type Animal struct {
    name string
}

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

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

type Dog struct {
    Animal
}

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

在这里,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!
}

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!

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