Go 関数は、エラー タイプを使用してエラーを表します。呼び出し元は、error の値をチェックすることで、関数が正常に実行されたかどうかを判断できます。エラー処理方法には、if ステートメントまたは errchk パッケージのチェック関数を使用する方法が含まれます。例: if ステートメントを使用してエラーを処理します: if err != nil { fmt.Println(err) }; errchk パッケージを使用してエラーを処理します: errchk.Check(err) // err が nil でない場合、エラーを出力して終了しますプログラム。
Go では、関数は error
型を使用してエラーを表すことができます。関数がエラーを返した場合、呼び出し元は error
の値をチェックすることで、関数が正常に実行されたかどうかを判断できます。
関数によって返されたエラーを処理するには、errchk
パッケージの if
ステートメントまたは check
関数を使用できます。
if
ステートメントを使用する if
ステートメントを使用してエラーを処理するのが最も一般的な方法です。例:
func divide(a, b int) (int, error) { if b == 0 { return 0, errors.New("division by zero") } return a / b, nil } func main() { result, err := divide(10, 2) if err != nil { fmt.Println(err) } else { fmt.Println(result) } }
errchk
パッケージの使用 errchk
このパッケージには、エラー処理を簡素化する check
関数が用意されています。例:
import "github.com/kisielk/errchk" func main() { result, err := divide(10, 2) errchk.Check(err) // 如果 err 不为 nil,则打印错误并退出程序 fmt.Println(result) }
次は、ファイル読み取り機能を実装するエラー処理を使用した実際的なケースです:
import ( "bufio" "bytes" "errors" "fmt" "io" ) // readFile 读取给定文件的内容,并返回一个字节切片 func readFile(path string) ([]byte, error) { f, err := os.Open(path) if err != nil { return nil, fmt.Errorf("os.Open: %w", err) // 使用 fmt.Errorf 包装错误 } defer f.Close() // 使用 defer 语句在函数返回前关闭文件 buf := new(bytes.Buffer) scanner := bufio.NewScanner(f) for scanner.Scan() { buf.WriteString(scanner.Text()) buf.WriteByte('\n') } if err := scanner.Err(); err != nil { return nil, fmt.Errorf("scanner.Err: %w", err) } return buf.Bytes(), nil } func main() { data, err := readFile("data.txt") if err != nil { fmt.Println(err) } else { fmt.Println(string(data)) } }
以上がGolang 関数の戻り値はエラーをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。