繁体   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