if err != nil
常见场景
- 文件操作:如打开、读取、写入文件时,可能因文件不存在、权限问题等产生错误。
- 网络请求:发起HTTP请求、连接TCP/UDP服务器等操作时,可能遇到网络故障、服务器无响应等错误。
- 类型断言:在进行类型断言时,如果实际类型与断言类型不匹配,会返回错误。
函数调用链中传递和处理错误示例
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.Errorf
和errors.New
区别
errors.New
:
- 功能简单,直接创建一个包含指定错误信息的新错误对象。
- 格式固定,无法对错误信息进行格式化。
- 示例:
err := errors.New("这是一个简单错误")
fmt.Errorf
:
- 基于
fmt.Sprintf
实现,可以对错误信息进行格式化,方便包含变量等。
- 适用于需要动态生成错误信息的场景。
- 示例:
err := fmt.Errorf("文件 %s 不存在", filePath)