ホームページ > バックエンド開発 > Golang > 構造体フィールドとしての関数と構造体メソッドとしての関数: Go ではどちらをいつ使用するか?

構造体フィールドとしての関数と構造体メソッドとしての関数: Go ではどちらをいつ使用するか?

DDD
リリース: 2024-10-30 02:05:28
オリジナル
335 人が閲覧しました

 Functions as Struct Fields vs. Struct Methods: When to Use Which in Go?

構造体フィールドとしての関数と構造体メソッドとしての関数

Go では、関数を構造体内のフィールドとして埋め込んだり、それらの構造体のメソッドとして定義したりできます。 。これらのアプローチの違いを理解すると、コード設計を最適化できます。

関数型のフィールド

関数型のフィールドは、構造体型に付加された真のメソッドではありません。これらは、構造体のメソッド セットの一部ではなく、関数への参照を保存します。

True メソッド

True メソッドは、受信側として構造体の型を使用して宣言されます。構造体のメソッドセットに不可欠です。これらにより、インターフェイスの実装と具体的な型の操作が可能になります。一度定義すると、メソッドは実行時に変更できません。

関数タイプのフィールドを使用する場合

  • イベント ハンドラーやネットワーク リクエスト ハンドラーなどのコールバックの場合。
  • 関数をフィールドに割り当て、実行時に再割り当てすることで仮想メソッドを模倣します。

真のメソッドを使用する場合

  • インターフェイスを実装する場合
  • 具象型を操作し、一貫したメソッド セットが必要な場合
  • メソッドは不変でフィールド アクセスが改ざんされる可能性があるため、セキュリティが懸念される場合

<code class="go">type Foo struct {
    Bar func()
}

func main() {
    f := Foo{
        Bar: func() { fmt.Println("initial") },
    }
    f.Bar()

    f.Bar = func() { fmt.Println("changed") }
    f.Bar()
}</code>
ログイン後にコピー

出力:

initial
changed
ログイン後にコピー

この例では、関数が Foo 構造体のフィールドとして埋め込まれています。実行時にフィールドを再割り当てすることで、Bar メソッドの動作を変更でき、関数型のフィールドの柔軟性を実証できます。

以上が構造体フィールドとしての関数と構造体メソッドとしての関数: Go ではどちらをいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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