1 回答
TA贡献1934条经验 获得超2个赞
运算+
符未在 type 的值上定义interface{}
。int
您必须先从值中获取类型值,interface{}
然后才能将其作为数字使用。
为此,您可以使用类型断言。看这个例子:
s := []interface{}{1, 2, 3, "invalid"}
sum := 0
for _, v := range s {
if i, ok := v.(int); ok {
sum += i
} else {
fmt.Println("Not int:", v)
}
}
fmt.Println("Sum:", sum)
输出(在Go Playground上尝试):
Not int: invalid Sum: 6
上面的例子只处理int
数字,没有别的。如果你想“支持”多种数字类型,更方便的方法是使用类型开关:
s := []interface{}{1, int32(2), int8(3), "invalid"}
sum := 0
for _, v := range s {
switch i := v.(type) {
case int:
sum += i
case int32:
sum += int(i)
case int8:
sum += int(i)
default:
fmt.Println("Not int:", v)
}
}
fmt.Println("Sum:", sum)
输出是一样的。在Go Playground试试这个。
- 1 回答
- 0 关注
- 142 浏览
添加回答
举报