2017-07-29 78 views
3

在結構中定義函數的用例/優點是什麼?結構中的函數。爲什麼?

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 := &http.Client{ 
    CheckRedirect: func(req *http.Request, via []*http.Request) error { 
     return http.ErrUseLastResponse 
    } 
} 

函數屬性只是自定義行爲的代表(而不僅僅是!)。

另一個例子是創建一個有事件的對象。

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 **的實現。當你用一個結構聲明一個函數時,我們做兩件事。首先,爲聲明的函數實現默認行爲。其次,您允許用戶自由地覆蓋已聲明函數的行爲。謝謝! –

+0

我很高興我可以幫助:) – Albert221

-1

它允許您自定義某種類型的功能,而無需使用該功能。

相關問題