MST

星途 面试题库

面试题:Go语言中接口的定义及类型断言在接口使用中的应用

请定义一个包含 `Read` 和 `Write` 方法的接口 `IO`,并实现一个结构体 `File` 实现该接口。然后编写一个函数,接收一个 `interface{}` 类型参数,在函数内部使用类型断言判断该参数是否为 `IO` 接口类型,如果是则调用其 `Read` 方法,并简要说明类型断言在这种场景下的作用。
19.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

// 定义IO接口
type IO interface {
    Read()
    Write()
}

// 定义File结构体并实现IO接口
type File struct{}

func (f File) Read() {
    fmt.Println("File Read method")
}

func (f File) Write() {
    fmt.Println("File Write method")
}

// 接收interface{}类型参数并进行类型断言
func process(i interface{}) {
    if v, ok := i.(IO); ok {
        v.Read()
    } else {
        fmt.Println("参数不是IO接口类型")
    }
}

在这种场景下,类型断言的作用是判断传入的 interface{} 类型参数是否实现了 IO 接口。如果实现了,则可以调用 IO 接口的方法(这里是 Read 方法)。通过类型断言,可以在运行时动态地检查接口类型,使代码能够根据参数实际实现的接口来执行相应的操作,增加了代码的灵活性和通用性。

调用示例:

func main() {
    var f File
    process(f)
    process("not an IO type")
}

上述代码中,process 函数通过类型断言判断参数是否为 IO 接口类型,从而决定是否调用 Read 方法。在 main 函数中,分别传入实现了 IO 接口的 File 实例和非 IO 接口类型的数据,以展示类型断言的工作机制。