gpt4 book ai didi

go - 调用通过 interface{} 传入的 sql.NullFloat64 上的方法抛出错误

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:35 24 4
gpt4 key购买 nike

我有一个看起来像这样的简单函数:

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 是 NullFloat64NullInt64。如果 number 是 NullFloat64 类型,我对其调用 number.Float64 并以 Float64 形式返回数字值。如果我尝试在一个函数内调用相同的东西,该函数将数字作为接口(interface){} 的参数,我会得到编译错误:

number.Float64 undefined(类型接口(interface){}没有字段或方法Float64)

在函数内部,如果我调用 reflect.TypeOf(number),它将返回 NullFloat64,因此它知道它是什么类型,但我不能调用该类型方法。

最佳答案

number 的实际值(无论它是什么类型)被分配给类型开关中的 v。问题是您在分配给 newNumber 时重新使用了 number,当您进入case sql.NullFloat64v 的类型,其中包含 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
}

关于go - 调用通过 interface{} 传入的 sql.NullFloat64 上的方法抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31926732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com