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

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

王林
リリース: 2024-04-27 11:15:02
オリジナル
532 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート