2017-09-24 34 views
0

正確な名前はわかりませんが、私はGoで "連鎖関数呼び出し"の詳細を探しています。たとえば:連鎖関数呼び出しを実行しますか?

foo.DoSomething().WithThisOptionalThing()

は、だから私は、何か余分なのをし.WithThisOptionalThing()を追加するためにfoo.DoSomething()を使用しますが、可能性を持つことができます。これは可能ですか?正しい方向に向ける/いくつかの例を挙げてください。

+2

'DoSomething()'が他の言語と同じように 'WithThisOptionalThing()'メソッドを持つオブジェクトを返すことは可能です。私はあなたが何を求めているのか本当に分かりません。 – Flimzy

+0

はビルダーのパターンを思い出させる:) –

答えて

8

基本的には、すべての構成機能がメインの「オブジェクト」を返すようにしています。同時に、「実行」機能や、アクションを実行するために呼び出したいものは何でも構いません。ここで

はあなただけ知っている必要があり 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

を返します。私はこれに関する文書を見つけることができませんでした。何が起こっているのか分かっているなら、私に知らせてください。

関連する問題