去链函数调用?

时间:2017-09-24 13:53:42

标签: function go

不确定名称是什么,但我正在寻找有关"链接函数调用的更多信息"在Go。例如:

foo.DoSomething().WithThisOptionalThing()

所以我可以使用foo.DoSomething(),但可以添加.WithThisOptionalThing()来做额外的事情。这可能吗?请指出正确的方向/提供一些例子。

2 个答案:

答案 0 :(得分:8)

基本上,当你将所有东西连在一起并拥有最终的“Go”功能或你想要调用它以使其执行动作时,你使所有的配置函数都不断返回主“对象”。

以下是play

的示例
package main

import (
    "fmt"
)

func main() {
    DoSomething().Go()
    DoSomething().WithThisOptionalThing().Go()
}

type Chainable struct {
    thing bool
}

func DoSomething() *Chainable {
    return &Chainable{}
}
func (c *Chainable) WithThisOptionalThing() *Chainable {
    c.thing = true
    return c
}

func (c *Chainable) Go() error {
    // Actually do something now that it's been configured
    fmt.Println("Thing is", c.thing)
    return nil
}

答案 1 :(得分:0)

你只需要知道:当涉及链接时,你的方法应该总是

  • 接收pointers并返回pointers

  • 接收values并返回values

  • 接收values并返回pointers

至少他们是我所知道的工作组合。我找不到任何关于此的文件。如果你知道发生了什么,请告诉我。