回答
我認爲最好的答案就是一個例子。
看文檔中的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
屬性來指定該事件的行爲。
**「功能屬性是自定義行爲的代表」**。你釘在那裏!我在[client.go](https://github.com/golang/go/blob/master/src/net/http/client.go)中深入瞭解** checkRedirect **的實現。當你用一個結構聲明一個函數時,我們做兩件事。首先,爲聲明的函數實現默認行爲。其次,您允許用戶自由地覆蓋已聲明函數的行爲。謝謝! –
我很高興我可以幫助:) – Albert221
它允許您自定義某種類型的功能,而無需使用該功能。
- 1. 爲什麼在Objective-C的結構中使用函數指針?
- 2. 爲什麼我不能爲D中的結構實現默認構造函數?
- 3. 爲什麼allocator在構造函數中?
- 4. 爲什麼C#中的結構不能有明確的默認構造函數
- 5. 爲什麼我的構造函數在結構中的映射不工作?
- 6. 爲什麼我需要轉換從函數返回的結構?
- 7. 使用結構的C函數,爲什麼它不起作用?
- 8. PHP數組()構造函數創建什麼數據結構?
- 9. 爲什麼DateTime是.Net中的結構?
- 10. 爲什麼構造函數不是構造函數?
- 11. Python中的導入函數的結構是什麼?
- 12. 結構中的某個函數後的含義是什麼
- 13. 爲什麼strptime c函數會改變結構?
- 14. 爲什麼該方法調用結束複製構造函數?
- 15. 爲什麼std ::散列結構而不是函數?
- 16. 結構 - 爲什麼得到函數不能比較scanf?
- 17. 爲什麼VFS函數同時獲得結構inode和文件?
- 18. 爲什麼構造函數中需要apply()函數
- 19. 爲什麼System.Data.SqlClient.SqlDataReader沒有構造函數
- 20. 爲什麼構造函數未定義?
- 21. 爲什麼JAVA需要構造函數?
- 22. 爲什麼調用基構造函數?
- 23. 爲什麼不移動構造函數?
- 24. 爲什麼emplace_back調用析構函數?
- 25. 爲什麼構造函數改變了?
- 26. 爲什麼structs沒有析構函數?
- 27. 爲什麼不調用析構函數?
- 28. 我的def函數代碼結構中有什麼錯誤
- 29. 什麼是FORTRAN中函數的基本結構?
- 30. C中的結構和函數範圍有什麼區別?
@TehSphinX感謝您根據您的假設對我進行投票,並且是可以的https://play.golang.org/p/AjFvfGDjRI –