MST

星途 面试题库

面试题:Go语言空接口在类型断言与类型分支中的高级应用

在一个函数中,接收一个空接口类型的参数,要求使用类型断言和类型分支来实现根据参数实际类型进行不同的业务逻辑处理。假设可能传入的类型有int、string、自定义结构体,结构体中有两个string类型字段。请详细阐述思路并编写完整代码。
25.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

思路阐述

  1. 首先定义一个函数,该函数接收一个空接口类型的参数。
  2. 使用类型断言判断参数的实际类型。如果是int类型,执行与整数相关的业务逻辑。
  3. 使用类型断言判断参数的实际类型。如果是string类型,执行与字符串相关的业务逻辑。
  4. 使用类型断言判断参数的实际类型。如果是自定义结构体类型,执行与结构体相关的业务逻辑。
  5. 当传入的参数类型不匹配任何已处理的类型时,可以给出相应的提示。

代码示例

package main

import (
    "fmt"
)

// 定义自定义结构体
type MyStruct struct {
    Field1 string
    Field2 string
}

// 定义处理函数
func process(i interface{}) {
    switch v := i.(type) {
    case int:
        fmt.Printf("接收到的是int类型,值为: %d\n", v)
    case string:
        fmt.Printf("接收到的是string类型,值为: %s\n", v)
    case MyStruct:
        fmt.Printf("接收到的是MyStruct类型,Field1: %s, Field2: %s\n", v.Field1, v.Field2)
    default:
        fmt.Printf("不支持的类型: %T\n", i)
    }
}

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

func main() {
    var num int = 10
    var str string = "hello"
    var s MyStruct = MyStruct{Field1: "value1", Field2: "value2"}

    process(num)
    process(str)
    process(s)

    // 测试不支持的类型
    var f float32 = 3.14
    process(f)
}

在上述代码中:

  1. 定义了一个MyStruct结构体,包含两个string类型的字段。
  2. process函数通过类型分支switch对传入的空接口类型参数i进行类型判断,并执行相应的业务逻辑。
  3. main函数中,创建了不同类型的变量并调用process函数进行测试。当传入不支持的类型时,会输出不支持的类型信息。