2017-07-29 2 views
3

goの構造内で関数を定義するというユースケース/利点は何ですか?構造内の関数。どうして?

type demo struct { 
    F func() 
} 
+1

@TehSphinXあなたの前提に基づいて投票していただきありがとうございます。可能です。https://play.golang.org/p/AjFvfGDjRI –

答えて

6

私は最良の答えが一例だと思います。

Client.CheckRedirectを参照してください。

type Client struct { 
    // (...) 
    CheckRedirect func(req *Request, via []*Request) error 
} 

これはhttp.Clientは、リダイレクト応答を有するたびに呼び出される関数です。実際、この関数はパブリックプロパティであるため、Clientオブジェクトを作成するときにこれを設定することができます。したがって、このような場合にカスタムビヘイビアを定義することができます。

client := &http.Client{ 
    CheckRedirect: func(req *http.Request, via []*http.Request) error { 
     return http.ErrUseLastResponse 
    } 
} 

機能のプロパティは、カスタムビヘイビアの代理人です(だけでなく、!)。

もう1つの例は、イベントを持つオブジェクトを作成することです。

type Example struct { 
    EventHandler func(params []interface{}) 
} 

あなたはExample.EventHandlerプロパティを設定することによって、そのイベントの動作を指定することができます。

+1

**「機能プロパティはカスタム動作の代理人です」** **あなたはそこに釘付け!私は[client.go](https://github.com/golang/go/blob/master/src/net/http/client.go)の** checkRedirect **の実装について深く掘り下げています。構造体を持つ関数を宣言するとき、私たちは2つのことを行います。まず、宣言された関数のデフォルト動作を実装します。次に、宣言された関数の動作を変更する自由をユーザに与えます。ありがとう! –

+0

私は助けてくれると嬉しいです:) – Albert221

-1

このタイプから機能をカスタマイズして、そのタイプから機能をカスタマイズすることができます。

関連する問題