MST

星途 面试题库

面试题:Go未命名类型在接口实现与类型断言中的高级运用

在Go语言中,给定一个包含未命名类型的复杂类型体系,要求通过接口实现和类型断言的方式,编写一个函数来处理不同未命名类型的值,根据其具体类型执行不同的业务逻辑。例如,有一个接口`Handler`,包含`Handle`方法,有多种未命名类型都实现了这个接口,编写一个`Dispatch`函数,它接受一个`interface{}`类型参数,根据实际的未命名类型调用相应的`Handle`方法,同时要处理好类型断言失败的情况。
15.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

// Handler 接口定义
type Handler interface {
    Handle()
}

// Dispatch 函数实现
func Dispatch(data interface{}) {
    if handler, ok := data.(Handler); ok {
        handler.Handle()
    } else {
        fmt.Println("类型断言失败,该类型未实现 Handler 接口")
    }
}

// 定义一个未命名类型并实现 Handler 接口
type customType struct{}

func (ct customType) Handle() {
    fmt.Println("customType 的 Handle 方法被调用")
}

你可以这样调用:

func main() {
    var data interface{}
    data = customType{}
    Dispatch(data)

    data = "not a Handler type"
    Dispatch(data)
}

在上述代码中:

  1. 定义了Handler接口,包含Handle方法。
  2. Dispatch函数接收一个空接口类型参数,通过类型断言判断传入的参数是否实现了Handler接口,如果实现了则调用Handle方法,否则打印类型断言失败的提示。
  3. 定义了一个未命名类型customType并实现了Handler接口的Handle方法。
  4. main函数中,分别使用实现了Handler接口的类型和未实现该接口的类型调用Dispatch函数,展示其处理逻辑。