MST

星途 面试题库

面试题:Go语言defer在函数错误处理中的应用

编写一个函数,该函数读取一个文件的内容。要求使用defer语句确保文件在函数结束时正确关闭,并且能够合理处理文件读取过程中可能出现的错误,同时阐述defer语句在此场景下相较于其他方式关闭文件的优势。
27.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "os"
)

func readFileContent(filePath string) (string, error) {
    file, err := os.Open(filePath)
    if err != nil {
        return "", err
    }
    defer file.Close()

    var content []byte
    content, err = os.ReadFile(filePath)
    if err != nil {
        return "", err
    }

    return string(content), nil
}

defer语句相较于其他方式关闭文件的优势

  1. 简洁性:使用defer语句可以在打开文件后立即安排文件关闭操作,无需在函数的多个返回点处重复编写关闭文件的代码。例如,在上面的代码中,无论os.ReadFile是否成功,defer语句都会确保文件被关闭,而如果不使用defer,则需要在os.ReadFile成功和失败的返回点都手动关闭文件。
  2. 避免资源泄露:即使函数在执行过程中发生了异常或提前返回,defer语句注册的函数依然会被执行,从而保证文件资源能够被正确释放,有效避免了资源泄露的问题。如果手动关闭文件,很容易因为疏忽或者复杂的逻辑分支导致文件没有在合适的时机关闭。