在go中,类型断言(如 `x.(t)`)只能作用于单个值,而接口方法 `intersect()` 返回两个值(`interval, error`),直接对多值调用类型断言会导致“multiple-value in single-value context”编译错误。
这个问题的根本原因在于 Go 的语法限制:类型断言操作符 .(T) 只能应用于单个表达式结果,不能直接作用于多值返回的函数调用。你在测试代码中写了:
got, _ := c.iv1.Intersect(c.iv2).(floatInterval)
这行代码试图对 c.iv1.Intersect(c.iv2) 的两个返回值整体执行类型断言,但 Go 编译器只允许对一个值做断言——因此报错:“multiple-value in single-value context”。
✅ 正确做法是先解构多值返回,再对其中的接口值单独做类型断言:
gotInterval, err := c.iv1.Intersect(c.iv2)
if err != nil {
t.Fatalf("Intersection failed: %v", err)
}
got := gotInterval.(floatInterval) // ✅ 单值断言,合法
或者更简洁地(如原答案所示):