2017-07-29 55 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

它允许您自定义某种类型的功能,而无需使用该功能。

相关问题