MST

星途 面试题库

面试题:Go通过空接口实现多态性调用时的类型断言与类型分支应用

假设你有一个函数,通过空接口接受多种类型的参数来实现多态调用。现在要求在函数内部,使用类型断言和类型分支两种方式,对传入的参数进行处理。如果传入的是整数,返回其平方;如果是字符串,返回其长度;如果是切片,返回切片的元素个数。请分别用类型断言和类型分支两种方法实现,并阐述这两种方式在这种场景下的优缺点。
33.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

类型断言实现

package main

import (
    "fmt"
)

func processWithAssertion(arg interface{}) (interface{}, error) {
    if num, ok := arg.(int); ok {
        return num * num, nil
    } else if str, ok := arg.(string); ok {
        return len(str), nil
    } else if slice, ok := arg.([]interface{}); ok {
        return len(slice), nil
    }
    return nil, fmt.Errorf("unsupported type")
}

类型分支实现

package main

import (
    "fmt"
)

func processWithTypeSwitch(arg interface{}) (interface{}, error) {
    switch v := arg.(type) {
    case int:
        return v * v, nil
    case string:
        return len(v), nil
    case []interface{}:
        return len(v), nil
    default:
        return nil, fmt.Errorf("unsupported type")
    }
}

优缺点对比

  • 类型断言
    • 优点:代码相对简洁,对于简单的类型判断场景,代码量较少。
    • 缺点:需要多次手动进行类型断言,代码可读性较差,且如果需要处理的类型较多,代码会变得冗长且容易出错。
  • 类型分支
    • 优点:代码结构清晰,可读性强,对于多种类型的处理一目了然,维护方便。
    • 缺点:相较于简单的类型断言,代码量会稍多一些,但在复杂场景下这点劣势不明显。