为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
芜湖不芜 2022-01-10 17:06:52
我的情况下,我不明白这个解释。可能是这样,因为我想使用界面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))}
查看完整描述

2 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

在表达式中:

newFacade , err := Facade(NewObject())

Facade(NewObject())不是构造函数,而是显式类型转换。您根本不需要它,因为NewObject()已经是构造函数,它返回一个Facade类型和一个错误。所以就:

newFacade , err := NewObject()

在我看来应该工作。


查看完整回答
反对 回复 2022-01-10
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

问题是 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)

}


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信