Go で関数フィールドと構造体メソッドを使用する場合は?

Patricia Arquette
リリース: 2024-10-29 03:23:02
オリジナル
829 人が閲覧しました

 When to Use Function Fields vs. Struct Methods in Go?

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

Go では、関数を構造体に関連付ける方法は 2 つあります: フィールドとして、または方法。どちらのアプローチも異なる目的を果たしますが、効果的なコーディングには区別を理解することが重要です。

関数型のフィールド

関数型のフィールドは、構造体内の変数を参照します。関数を値として保持できます。これは、後で実行するために呼び出し可能なルーチンを保存する簡単な方法を提供します。メソッドとは異なり、これらの関数フィールドは、構造体のメソッド セットの一部ではありません

メソッド

メソッドは、特定の構造体型に明示的にアタッチされる関数です。 。構造体をレシーバーとして宣言すると、それらは構造体のメソッド セットの一部となり、構造体の内部状態へのアクセスが提供されます。インターフェイスを実装するには、真のメソッドを定義する必要があります。

いつ使用するか

  • 関数フィールド: コールバック関数の保存または外部関数へのアクセスに適しています。これらは実行時の再割り当てを可能にし、さまざまな条件に基づいて動的に割り当てることができます。
  • メソッド: 構造体型に固有の操作を定義するのに最適です。これらは構造体のパブリック API の一部であり、コンパイル後に変更することはできません。

次のスニペットを考えてみましょう:

<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>
ログイン後にコピー

ここで、f.Barは関数型のフィールドです。 2 番目の関数値が割り当てられて呼び出されるときのように、実行時に再割り当てできます。

真のメソッドとは対照的に、Bar は Foo の内部状態にアクセスできません。構造体自体から独立して動作します。

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

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