2017-09-24 55 views
0

不知道什么是正确的名称,但我正在寻找更多关于“链接函数调用”的信息。例如:去链式函数调用?

foo.DoSomething().WithThisOptionalThing()

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

+2

如果'DoSomething()'返回带有'WithThisOptionalThing()'方法的对象,就可能与其他语言相同。虽然我不明白你在问什么。 – Flimzy

+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 
} 
0

你只需要知道一个例子:当涉及到链接的东西你的方法应该要么始终

  • 收到pointers并返回pointers

  • 收到values,并返回values

  • 收到values,并返回pointers

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