MST

星途 面试题库

面试题:Go自定义类型如何实现接口嵌套及应用场景

假设已有多个简单接口,如 `Reader` 接口有 `Read` 方法,`Writer` 接口有 `Write` 方法。请设计一个新的自定义类型,通过接口嵌套的方式,使其同时具备读和写的能力,并说明这种接口嵌套在实际项目中的应用场景,比如在网络通信或文件操作方面。
45.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 设计新的自定义类型

    type ReadWriter interface {
        Reader
        Writer
    }
    

    这里通过在 ReadWriter 接口中嵌套 ReaderWriter 接口,使得 ReadWriter 接口同时具备 ReadWrite 方法。

  2. 应用场景

    • 网络通信:在实现网络套接字(socket)通信时,一个连接通常需要既能读取数据(接收来自对方的数据),又能写入数据(向对方发送数据)。可以定义一个实现了 ReadWriter 接口的 NetConn 结构体,这样在处理网络连接的代码中,就可以统一使用 ReadWriter 接口来进行读写操作,使得代码逻辑更加清晰和统一。例如在 Go 语言标准库的 net 包中,net.Conn 接口就类似这样的设计,它既可以读数据(Read 方法)也可以写数据(Write 方法)。
    • 文件操作:当对文件进行操作时,有些场景需要既读取文件内容,又向文件写入内容。比如日志文件,可能需要先读取已有日志内容做一些分析,然后再写入新的日志。定义一个实现 ReadWriter 接口的 FileOp 结构体,在文件操作相关的函数中使用 ReadWriter 接口,可以方便地对文件进行读写操作。在 Go 语言标准库的 os 包中,os.File 结构体实现了 io.Readerio.Writer 接口,就类似于这种接口嵌套的应用,使得 os.File 类型既能读又能写文件。