亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調用通過 interface{} 傳入的 sql.NullFloat64 上的方法拋出錯誤

調用通過 interface{} 傳入的 sql.NullFloat64 上的方法拋出錯誤

Go
米琪卡哇伊 2021-11-01 10:47:38
我有一個簡單的函數,如下所示: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  

}


查看完整回答
反對 回復 2021-11-01
  • 1 回答
  • 0 關注
  • 277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號