gpt4 book ai didi

go - 为什么在将接口(interface)变量传递给函数时应使用类型断言

转载 作者:行者123 更新时间:2023-12-01 22:35:35 25 4
gpt4 key购买 nike

将接口变量传递给函数时,为什么需要类型声明?
这是代码:

func parseFloat64(f interface{}) (float64, error) {
var ff float64

switch f.(type) {
case float64:
ff = f.(float64)
case float32:
ff = float64(f.(float32))
case string:
if f == "" { // it right ,not need Type assertion
return 0.0, nil
}
v, err := strconv.ParseFloat(f.(string), 64) // why need
if err != nil {
return 0.0, err
}
ff = v
case int:
ff = float64(f.(int))
default:
errMsg := fmt.Sprintf("%v:type is %v can't convert to float64", f, reflect.TypeOf(f))
return 0.0, errors.New(errMsg)
}

return ff, nil
}

最佳答案

答案是https://go-proverbs.github.io/,更确切地说是谚语“interface {}什么也没说”。
特别是因为我们在谈论解析和比较功能。相比之下,第一个操作数应始终可分配给第二个操作数的类型。在您的情况下,由于收到的接口是空的,因此您实际上不确定所接收的类型。

关于go - 为什么在将接口(interface)变量传递给函数时应使用类型断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63734391/

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