我的情况下,我不明白这个解释。可能是这样,因为我想使用界面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()
在我看来应该工作。
呼啦一阵风
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)
}
- 2 回答
- 0 关注
- 131 浏览
添加回答
举报
0/150
提交
取消