面试题答案
一键面试package main
import (
"fmt"
"math"
)
func convertToIntSlice(data []interface{}) ([]int, error) {
var result []int
for _, value := range data {
switch v := value.(type) {
case int:
result = append(result, v)
case float64:
if v > math.MaxInt || v < math.MinInt {
return nil, fmt.Errorf("float64 value out of int range: %f", v)
}
result = append(result, int(v))
default:
return nil, fmt.Errorf("unsupported type: %T", value)
}
}
return result, nil
}
在这个过程中,处理边界问题的方式为:当遇到float64
类型转换为int
时,首先检查float64
的值是否在int
类型的取值范围内(math.MaxInt
和math.MinInt
),如果超出范围,则返回错误,避免精度丢失和数值溢出等问题。对于其他不支持的类型,同样返回错误以提示调用者。