ホームページ  >  記事  >  バックエンド開発  >  golangで関数を書き直すにはどうすればよいですか?

golangで関数を書き直すにはどうすればよいですか?

王林
王林オリジナル
2024-04-27 11:15:02511ブラウズ

Go では、メソッドのオーバーライドにより、同じメソッド シグネチャを維持しながら、基本クラスのメソッドを派生クラスで再定義できます。override キーワードを使用します。オーバーライドされたメソッドは、基本メソッドと同じシグネチャを持つ必要があります。オーバーライドされたメソッドのレシーバー型は、基本型のサブタイプである必要があります。

如何在 golang 中重写函数?

Go での関数のオーバーライド

オーバーライドを使用すると、メソッドの署名を保持しながら、派生クラスで既存のメソッドの新しい実装を定義できます。これにより、インターフェイスを変更せずに基本クラスの機能を拡張できます。

構文

Go でのオーバーライドでは、override キーワードを使用します。

type MyStruct struct {
    baseStruct
}

func (m MyStruct) SomeMethod() {}

SomeMethod メソッドはオーバーライドされます。 baseStruct の同じ名前のメソッド。

注:

  • オーバーライドされたメソッドは、オーバーライドされた基本メソッドと同じシグネチャを持つ必要があります。
  • オーバーライドされたメソッドのレシーバー型は、基本型のサブタイプである必要があります。
  • Go には仮想メソッドや動的バインディングはありません。

実際的なケース

Speak メソッドを備えた Animal 基本クラスがあるとします:

type Animal struct {
    name string
}

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

Speak メソッドを拡張して吠える Dog 派生クラスを作成できます。

type Dog struct {
    Animal
}

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

Here, Dog.Speak メソッドAnimal.Speak メソッドをオーバーライドして、Dog 固有の実装を提供します。

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!
}

以上がgolangで関数を書き直すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。