面试题答案
一键面试package main
import (
"fmt"
"os"
)
// 自定义错误类型
type FileParseError struct {
LineNumber int
ErrMsg string
}
func (fpe FileParseError) Error() string {
return fmt.Sprintf("在第 %d 行解析文件时出错: %s", fpe.LineNumber, fpe.ErrMsg)
}
// 解析文件函数
func ParseFile(filePath string) error {
data, err := os.ReadFile(filePath)
if err != nil {
return FileParseError{
LineNumber: -1,
ErrMsg: fmt.Sprintf("读取文件失败: %v", err),
}
}
// 模拟解析文件内容
lines := string(data)
for lineNum, line := range lines {
// 这里假设如果某一行包含非法字符就认为解析失败
if line == '?' {
return FileParseError{
LineNumber: lineNum + 1,
ErrMsg: "发现非法字符",
}
}
}
return nil
}
你可以使用以下方式调用和处理错误:
func main() {
err := ParseFile("test.txt")
if err != nil {
if fpe, ok := err.(FileParseError); ok {
fmt.Println(fpe.Error())
} else {
fmt.Printf("未知错误: %v\n", err)
}
}
}