MST

星途 面试题库

面试题:Go语言空接口在函数参数和返回值中的类型安全应用

设计一个函数,其参数和返回值都使用空接口。该函数需要能够接收任意类型的数据,在函数内部对数据进行一些处理(例如,若传入的是数值类型则进行平方运算,若是字符串类型则计算其长度),然后返回处理后的数据。请确保在整个过程中的类型安全性,避免运行时错误。
30.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func processData(data interface{}) interface{} {
    switch v := data.(type) {
    case int:
        return v * v
    case float32:
        return v * v
    case float64:
        return v * v
    case string:
        return len(v)
    default:
        return nil
    }
}

你可以使用如下方式调用这个函数:

func main() {
    result1 := processData(5)
    fmt.Println(result1)

    result2 := processData(3.14)
    fmt.Println(result2)

    result3 := processData("hello")
    fmt.Println(result3)

    result4 := processData([]int{1, 2, 3})
    fmt.Println(result4)
}

上述代码中:

  1. processData 函数接受一个空接口类型的参数 data,在函数内部使用 switch 语句进行类型断言。
  2. 如果 data 是数值类型(intfloat32float64),则进行平方运算并返回结果。
  3. 如果 data 是字符串类型,则计算其长度并返回。
  4. 对于其他类型,直接返回 nil。在 main 函数中展示了不同类型数据传入该函数后的处理结果。

在Go语言中这样处理可以在编译阶段就保证类型安全性,避免运行时错误。不同语言实现方式略有不同,以上是以Go语言为例给出的解决方案。