MST

星途 面试题库

面试题:Go空接口类型断言在复杂数据结构中的应用

假设有一个空接口类型的切片,其中存放了不同类型的结构体实例,每个结构体都有自己独特的方法。请编写代码,通过类型断言,调用每个结构体实例特有的方法,并处理可能出现的类型断言失败的情况。
46.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

// 定义不同的结构体
type StructA struct{}
func (a StructA) MethodA() {
    fmt.Println("StructA's MethodA")
}

type StructB struct{}
func (b StructB) MethodB() {
    fmt.Println("StructB's MethodB")
}

func main() {
    var interfaceSlice []interface{}
    interfaceSlice = append(interfaceSlice, StructA{})
    interfaceSlice = append(interfaceSlice, StructB{})

    for _, item := range interfaceSlice {
        if a, ok := item.(StructA); ok {
            a.MethodA()
        } else if b, ok := item.(StructB); ok {
            b.MethodB()
        } else {
            fmt.Println("Type assertion failed")
        }
    }
}

在上述代码中:

  1. 首先定义了两个不同的结构体 StructAStructB,并分别为它们定义了各自特有的方法 MethodAMethodB
  2. 创建了一个空接口类型的切片 interfaceSlice,并向其中添加了 StructAStructB 的实例。
  3. 通过 for 循环遍历这个切片,使用类型断言来判断每个元素的实际类型。如果类型断言成功,就调用对应的方法;如果失败,就打印出 "Type assertion failed"。

上述代码使用 Go 语言编写,因为 Go 语言有简洁的类型断言语法且在处理接口类型切片时非常方便。不同编程语言实现方式会有所不同,但核心思路类似,都是通过类型判断来调用相应结构体的独特方法并处理类型不匹配的情况。