MST
星途 面试题库

面试题:Go类型强制转换边界处理在切片场景下的应用

假设有一个`[]interface{}`类型的切片,其中包含各种数值类型(如int、float64等)。现在需要将切片中的元素根据实际类型进行转换,并处理可能存在的边界问题,例如将float64转换为int时的精度丢失。请编写一个函数,接收这个`[]interface{}`切片,并返回一个处理后的`[]int`切片,同时说明在这个过程中是如何处理边界问题的。
39.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
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.MaxIntmath.MinInt),如果超出范围,则返回错误,避免精度丢失和数值溢出等问题。对于其他不支持的类型,同样返回错误以提示调用者。