@@ -327,19 +327,129 @@ fmt.Println(doc.Content)
327327
328328## 错误处理
329329
330- 所有读取操作都返回 error,建议进行适当的错误处理:
330+ 库提供了统一的错误封装和类型检查功能,方便进行精确的错误处理。
331+
332+ ### 预定义错误类型
333+
334+ ``` go
335+ var (
336+ ErrUnsupportedFormat = errors.New (" unsupported file format" ) // 不支持的文件格式
337+ ErrFileNotFound = errors.New (" file not found" ) // 文件不存在
338+ ErrFileOpen = errors.New (" failed to open file" ) // 无法打开文件
339+ ErrFileRead = errors.New (" failed to read file" ) // 读取文件失败
340+ ErrFileParse = errors.New (" failed to parse file" ) // 解析文件失败
341+ ErrInvalidFormat = errors.New (" invalid file format" ) // 文件格式无效
342+ ErrEmptyFile = errors.New (" file is empty" ) // 文件为空
343+ ErrSheetNotFound = errors.New (" sheet not found" ) // 工作表不存在
344+ )
345+ ```
346+
347+ ### 基本错误处理
331348
332349``` go
333350doc , err := docreader.ReadDocument (" file.docx" )
334351if err != nil {
352+ log.Printf (" 读取文件失败: %v " , err)
353+ return
354+ }
355+ ```
356+
357+ ### 使用错误类型检查
358+
359+ ``` go
360+ doc , err := docreader.ReadDocument (" file.unknown" )
361+ if err != nil {
362+ // 使用 errors.Is 进行错误类型判断
363+ if errors.Is (err, docreader.ErrUnsupportedFormat ) {
364+ log.Println (" 不支持的文件格式" )
365+ } else if errors.Is (err, docreader.ErrFileNotFound ) {
366+ log.Println (" 文件不存在" )
367+ } else if errors.Is (err, docreader.ErrFileOpen ) {
368+ log.Println (" 无法打开文件" )
369+ } else {
370+ log.Printf (" 其他错误: %v " , err)
371+ }
372+ return
373+ }
374+ ```
375+
376+ ### 使用辅助函数
377+
378+ ``` go
379+ doc , err := docreader.ReadDocument (" file.pdf" )
380+ if err != nil {
381+ // 使用辅助函数进行错误检查
382+ if docreader.IsUnsupportedFormat (err) {
383+ log.Println (" 不支持的文件格式" )
384+ } else if docreader.IsFileNotFound (err) {
385+ log.Println (" 文件不存在" )
386+ } else if docreader.IsFileOpen (err) {
387+ log.Println (" 无法打开文件" )
388+ } else if docreader.IsFileRead (err) {
389+ log.Println (" 读取文件失败" )
390+ } else if docreader.IsFileParse (err) {
391+ log.Println (" 解析文件失败" )
392+ } else {
393+ log.Printf (" 未知错误: %v " , err)
394+ }
395+ return
396+ }
397+ ```
398+
399+ ### 获取详细错误信息
400+
401+ ``` go
402+ doc , err := docreader.ReadDocument (" file.docx" )
403+ if err != nil {
404+ // 错误信息包含操作名称和文件路径
405+ // 格式: "操作名称: 文件路径: 错误详情"
406+ log.Printf (" 详细错误: %v " , err)
407+
408+ // 使用 errors.Unwrap 获取原始错误
409+ if unwrapped := errors.Unwrap (err); unwrapped != nil {
410+ log.Printf (" 原始错误: %v " , unwrapped)
411+ }
412+ return
413+ }
414+ ```
415+
416+ ### 完整示例
417+
418+ ``` go
419+ package main
420+
421+ import (
422+ " errors"
423+ " log"
424+ " github.com/yourusername/docreader"
425+ )
426+
427+ func main () {
428+ filePath := " document.pdf"
429+
430+ doc , err := docreader.ReadDocument (filePath)
431+ if err != nil {
432+ handleError (err)
433+ return
434+ }
435+
436+ log.Printf (" 成功读取文档,内容长度: %d " , len (doc.Content ))
437+ }
438+
439+ func handleError (err error ) {
335440 switch {
336- case strings.Contains (err.Error (), " 不支持的文件格式" ):
337- log.Println (" 文件格式不支持" )
338- case strings.Contains (err.Error (), " 无法打开" ):
339- log.Println (" 文件不存在或无法访问" )
441+ case docreader.IsUnsupportedFormat (err):
442+ log.Println (" 错误: 不支持的文件格式,请使用 .docx, .pdf, .xlsx, .pptx, .txt, .csv, .md 或 .rtf 格式" )
443+ case docreader.IsFileNotFound (err):
444+ log.Println (" 错误: 文件不存在,请检查文件路径" )
445+ case docreader.IsFileOpen (err):
446+ log.Println (" 错误: 无法打开文件,请检查文件权限" )
447+ case docreader.IsFileRead (err):
448+ log.Println (" 错误: 读取文件失败,文件可能已损坏" )
449+ case docreader.IsFileParse (err):
450+ log.Println (" 错误: 解析文件失败,文件格式可能不正确" )
340451 default :
341- log.Printf (" 读取失败 : %v " , err)
452+ log.Printf (" 错误 : %v " , err)
342453 }
343- return
344454}
345455```
0 commit comments