>백엔드 개발 >Golang >golang에서 함수를 다시 작성하는 방법은 무엇입니까?

golang에서 함수를 다시 작성하는 방법은 무엇입니까?

王林
王林원래의
2024-04-27 11:15:02526검색

Go에서 메서드 재정의를 사용하면 동일한 메서드 서명을 유지하면서 기본 클래스의 메서드를 파생 클래스에서 재정의할 수 있습니다. override 키워드를 사용하세요. 재정의된 메서드에는 기본 메서드와 동일한 시그니처가 있어야 합니다. 재정의된 메서드의 수신자 유형은 기본 유형의 하위 유형이어야 합니다.

如何在 golang 中重写函数?

Go의 함수 재정의

재정의를 사용하면 메서드 시그니처를 유지하면서 파생 클래스에 있는 기존 메서드의 새로운 구현을 정의할 수 있습니다. 이를 통해 인터페이스를 변경하지 않고도 기본 클래스의 기능을 확장할 수 있습니다.

Syntax

Go에서 Overriding은 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!
}

SomeMethod 메서드는 baseStruct 메서드와 동일한 이름을 재정의합니다. .

참고:

🎜
  • 재정의된 메서드는 재정의된 기본 메서드와 동일한 시그니처를 가져야 합니다.
  • 재정의된 메소드의 수신자 유형은 기본 유형의 하위 유형이어야 합니다.
  • Go에는 가상 메서드나 동적 바인딩이 없습니다.
🎜🎜실용 사례🎜🎜🎜 Speak 메서드가 있는 Animal 기본 클래스가 있다고 가정해 보겠습니다. 🎜rrreee🎜를 만들 수 있습니다. >Dog 짖기 위한 Speak 메서드를 확장하는 파생 클래스: 🎜rrreee🎜여기에서 Dog.Speak 메서드는 Speak를 재정의합니다. > 메소드, Dog별 구현을 제공합니다. 🎜🎜🎜예🎜🎜rrreee

위 내용은 golang에서 함수를 다시 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.