去链函数调用?

Rog*_*ers 0 function go

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

foo.DoSomething().WithThisOptionalThing()

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

Dav*_*rth 8

基本上,您将所有配置函数保持返回主"对象",同时将事物链接在一起并具有最终的"Go"功能或任何您想要调用它以使其执行操作.

这是一个关于游戏的例子

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
}
Run Code Online (Sandbox Code Playgroud)