MST

星途 面试题库

面试题:Go语言io包中实现文件复制的基础方式

请使用Go语言的io包,编写一个基础的文件复制函数,将源文件内容复制到目标文件,并解释涉及到的io包主要接口和函数的作用。
17.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "io"
    "os"
)

func copyFile(src, dst string) error {
    srcFile, err := os.Open(src)
    if err != nil {
        return err
    }
    defer srcFile.Close()

    dstFile, err := os.Create(dst)
    if err != nil {
        return err
    }
    defer dstFile.Close()

    _, err = io.Copy(dstFile, srcFile)
    if err != nil {
        return err
    }

    return nil
}

io包主要接口和函数作用解释:

  1. io.Reader接口
    • 定义:
type Reader interface {
    Read(p []byte) (n int, err error)
}
  • 作用:该接口表示可以从其读取数据的对象。Read方法将数据读入字节切片p,返回读取的字节数n和可能的错误err。当读到文件末尾时,err通常为io.EOF。在上述代码中,os.Open返回的*os.File类型实现了io.Reader接口,因此srcFile可以作为io.Copy的源数据读取对象。
  1. io.Writer接口
    • 定义:
type Writer interface {
    Write(p []byte) (n int, err error)
}
  • 作用:该接口表示可以向其写入数据的对象。Write方法将字节切片p中的数据写入,返回写入的字节数n和可能的错误err。在上述代码中,os.Create返回的*os.File类型实现了io.Writer接口,因此dstFile可以作为io.Copy的目标数据写入对象。
  1. io.Copy函数
    • 定义:
func Copy(dst Writer, src Reader) (written int64, err error)
  • 作用:io.Copy函数从实现了io.Reader接口的src读取数据,并将其写入实现了io.Writer接口的dst。它会持续读取和写入,直到在src上遇到io.EOF或者发生错误。返回值written表示成功写入的字节数,err表示可能发生的错误。在上述代码中,io.Copy函数实现了从源文件到目标文件的数据复制。