MST

星途 面试题库

面试题:Go中常见的错误处理方式及应用场景

请阐述在Go语言中,使用`if err != nil`进行错误处理的常见场景,并举例说明如何在函数调用链中传递和处理错误。同时,解释下`fmt.Errorf`和`errors.New`在创建错误对象上的区别。
11.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

if err != nil常见场景

  1. 文件操作:如打开、读取、写入文件时,可能因文件不存在、权限问题等产生错误。
  2. 网络请求:发起HTTP请求、连接TCP/UDP服务器等操作时,可能遇到网络故障、服务器无响应等错误。
  3. 类型断言:在进行类型断言时,如果实际类型与断言类型不匹配,会返回错误。

函数调用链中传递和处理错误示例

package main

import (
    "fmt"
)

func readFileContent(filePath string) (string, error) {
    // 模拟读取文件内容,这里简单返回错误
    return "", fmt.Errorf("file not found: %s", filePath)
}

func processFileContent(content string) (string, error) {
    // 模拟处理文件内容,这里简单返回错误
    return "", fmt.Errorf("content processing error")
}

func main() {
    filePath := "test.txt"
    content, err := readFileContent(filePath)
    if err != nil {
        fmt.Printf("读取文件错误: %v\n", err)
        return
    }
    processedContent, err := processFileContent(content)
    if err != nil {
        fmt.Printf("处理文件内容错误: %v\n", err)
        return
    }
    fmt.Printf("处理后的内容: %s\n", processedContent)
}

fmt.Errorferrors.New区别

  • errors.New
    • 功能简单,直接创建一个包含指定错误信息的新错误对象。
    • 格式固定,无法对错误信息进行格式化。
    • 示例:err := errors.New("这是一个简单错误")
  • fmt.Errorf
    • 基于fmt.Sprintf实现,可以对错误信息进行格式化,方便包含变量等。
    • 适用于需要动态生成错误信息的场景。
    • 示例:err := fmt.Errorf("文件 %s 不存在", filePath)