结构中的一个功能。为什么?

时间:2017-07-29 11:37:04

标签: go

在go中结构中定义函数的用例/优点是什么?

type demo struct {
    F func()
}

2 个答案:

答案 0 :(得分: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
    }
}

函数属性只是自定义行为的委托(而不仅仅是!)。

另一个例子是创建一个有事件的对象。

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

您可以通过设置Example.EventHandler属性来指定该事件的行为。

答案 1 :(得分:-1)

它允许您自定义类型的功能,而不是来自该类型。