猿问

去。接口中单值上下文中的多值

我的情况下,我不明白这个解释。可能是这样,因为我想使用界面


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 ? 

}

我也error尝试过作为指针传递,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))

}


芜湖不芜
浏览 132回答 2
2回答

缥缈止盈

在表达式中: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)}
随时随地看视频慕课网APP

相关分类

Go
我要回答