回答
我认为最好的答案就是一个例子。
看文档中的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 –