2016-05-18 8 views
-1

における単一値のコンテキストでの複数値Iは、トピックの下にインタフェース

Go: multiple value in single-value context

を読んしかし、私は、これは私の場合を説明し理解していません。それは私がインタフェース

を使用したいので、私は私もObjectOneへのポインタとして渡すerrorをしようと試みたが、それでもエラーコンパイラに

type Facade interface { 
    GetOne() int 
} 

type ObjectOne struct{ 
    one int 
} 

func NewObject(facadeError* error)(Facade, error){ 
    o := &ObjectOne{} 
    *facadeError = errors.New("Some funny error") 
    return o , *facadeError 
} 

func(o * ObjectOne)GetOne()int{ 
    return 1 
} 

func SomeWhereInCode(){ 
    var facadeError = error() 
    newFacade , err := Facade(NewObject(&facadeError)) 
} 

答えて

4

newFacade , err := Facade(NewObject()) 

Facade(NewObject())は、コンストラクタが、明示的な型変換ではありません。既にコンストラクタであるNewObject()Facadeの型とエラーを返すため、その必要は全くありません。だからちょうど:

newFacade , err := NewObject() 

私には思われる。

+0

それはとても簡単です。 ehh thx – Mbded

3
を取得

type Facade interface { 
    GetOne() int 
} 

type ObjectOne struct{ 
    one int 
} 

func NewObject()(Facade, error){ 
    o := &ObjectOne{} 
    return o , errors.New("Some funny error") 
} 

func(o * ObjectOne)GetOne()int{ 
    return 1 
} 

func SomeWhereInCode(){ 
    newFacade , err := Facade(NewObject()) 
// And here. I get error probbably because Facade constructor return one arguments (interface) and NewObject() return two. How should be ? 
} 

以下の場合にエラーmultiple-value NewObject() in single-value contextを得る方法だかもしれ

問題は、NewObjectに複数の戻り値があり、複数の値を返す(同じ行にある)関数をチェーンできないことです。

ファサードでなければならないと考える戻り値でFacade(...)を呼び出そうとしている理由が不明です。型変換を行っていますか?

エラーを処理してから、外部関数を呼び出してみてください。式において

type Facade interface { 
    GetOne() int 
} 

type ObjectOne struct{ 
    one int 
} 

func NewObject()(Facade, error){ 
    o := &ObjectOne{} 
    return o , errors.New("Some funny error") 
} 

func(o * ObjectOne)GetOne()int{ 
    return 1 
} 

func SomeWhereInCode(){ 
    newFacade , err := NewObject()) 
    if err != nil { 
     // handle err or panic 
    } 
    Facade(newFacade) 
}