簡體   English   中英

走。 接口中單值上下文中的多值

[英]Go. Multiple-value in single-value context in Interface

我讀了下面的主題

Go:單值上下文中的多個值

但是我不理解這種解釋。 可能就是這樣,因為我想使用界面

在以下情況multiple-value NewObject() in single-value context ,我multiple-value NewObject() in single-value context中得到錯誤的multiple-value NewObject() in single-value context

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 ? 
}

我也ObjectOneerror傳遞為指向ObjectOne指針,但仍會得到錯誤編譯器

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))
}

在表達式中:

newFacade , err := Facade(NewObject())

Facade(NewObject())不是構造函數,而是顯式類型轉換。 您根本不需要它,因為已經成為構造函數的NewObject()返回Facade類型和錯誤。 所以就:

newFacade , err := NewObject()

在我看來應該可以工作。

問題在於NewObject具有多個返回值,並且您不能鏈接或返回多個值的函數(在同一行中)。

目前尚不清楚為什么要嘗試在您認為應該是Facade的返回值上調用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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM