我有一个看起来像这样的简单函数:
func convertToRealNum(number interface{}) interface{}{
switch v := number.(type) {
default:
log.Fatal("unexpected type %T", v)
case sql.NullFloat64:
newNumber := number.Float64
case sql.NullInt64:
newNumber := number.Int64
}
return newNumber
}
数字是NullFloat64
或NullInt64
。如果number是NullFloat64类型,我在其上调用number.Float64并将该值作为Float64返回。如果我尝试在一个函数中调用相同的东西,该函数将number作为参数作为接口{}我得到编译错误:
number.Float64 undefined (type interface {} has no field or method Float64)
在函数内部,如果我调用reflect.TypeOf(number),它将返回NullFloat64,因此它知道它是什么类型,但是我不能调用那些类型的方法。
答案 0 :(得分:0)
数字的实际值(无论它是什么类型)在类型开关中分配给v
。问题是,您在number
的作业中重复使用newNumber
,当您进入interface{}
类型的case sql.NullFloat64
时,它仍然是旧的v
其中number
的值为func convertToRealNum(number interface{}) interface{}{
var newNumber interface{}
switch v := number.(type) {
default:
log.Fatal("unexpected type %T", v)
case sql.NullFloat64:
newNumber = v.Float64
case sql.NullInt64:
newNumber = v.Int64
}
return newNumber
}
,因此您需要将其用于分配。
mpc = loadcase('case14')
results = runpf(mpc)
branch_pf = results.branch(:, 14)