我有一個簡單的函數,如下所示: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 }number 是 aNullFloat64或 a NullInt64。如果 number 是 NullFloat64 類型,我會調用 number.Float64 并將數字的值作為 Float64 取回。如果我嘗試在一個函數中調用相同的東西,該函數將 number 作為參數作為 interface{} 我得到編譯錯誤:number.Float64 undefined (type interface {} has no field or method Float64)在函數內部,如果我調用reflect.TypeOf(number),它將返回NullFloat64,因此它知道它是什么類型,但我不能調用該類型的方法。
1 回答

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
數字的實際值(無論它是什么類型)v在類型開關中分配。問題是您number在對 的賦值中重新使用,當您進入它的類型時,它newNumber仍然是舊interface{}的case sql.NullFloat64,因為它的類型v具有numberin的值,因此您需要將它用于賦值。
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
}
- 1 回答
- 0 關注
- 277 瀏覽
添加回答
舉報
0/150
提交
取消