2017-09-24 28 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

至少他們知道我工作的組合。我找不到任何文件。如果你知道發生了什麼,請告訴我。