Go言語でのエラー処理方法


この文章は、Tuckerの古語レッスンGo言語を聞いてまとめたものです.
Go言語はYoutube

Go言語でエラーを扱う方法は大きく2つあります.
  • プログラムを殺す方法
  • のエラーを処理してプログラムの実行を継続する方法
  • .
    開発段階では、エラーが発生した場合、通常はエラーを迅速に殺すために、エラーを迅速に検索することが望ましい.
    サービス導入フェーズでは、UXを改善するために計画を継続することをお勧めします.
    ex)
  • 航空管制システムを作ると言ったとき、エラーでプログラムを殺すと危険な状況になる可能性があるので、プログラムが死なないようにしなければなりません.
  • のように、人工心臓機器に入るプログラムのように、プログラムが死んだら死なないプログラムを設計しなければならない.
  • 高良では,エラーが発生すると内部処理ではなくエラー値が返され,ユーザがエラーを処理できるようになる.

    Custom Error

    fmt.Errorf(formatter string, ...interface{}) error関数or errors.New(text string) error関数の使用
    後者は気持ちがいいと思います.

    error type

    type error interface {
        Error() string
    }
    Error() stringの方法を有し、いずれのタイプでもerrorになることができる.

    Error Wrapping

    func wrappingExam(filename string) error {
        f, err := os.Open(finame)
        if err != nil {
            return fmt.Errorf("error: %w", err)
        }
        defer f.Close()
        return nil
    }
    ラップという言葉のように、間違いをひとつひとつ包んでいけばいいのです.後入先出といってもいいでしょう.△最後に小包の間違いが一番先に外れた.
    発信者の立場から見ると、エラーがどこで起きているのか分からない.
    底から発生したエラーを(パッケージ)に包みます.(繰り返し)errors.As()で所望のエラーを取り出し、積み重ねられたエラーを解決することができるようになった.

    Panic


    処理が困難なエラーが発生した場合にプログラムを早期に終了する方法.(急死の方法)
    エラーを解決するためにすばやく閉じます.
    panicを使用すると、プログラムはすぐに閉じられ、ログを使用して問題がどこにあるかを直接表示することができ、エラーをより明確にし、検索しやすくすることができます.
    func panic(interface{})
    // 모든 타입 사용 가능
    panic(42)
    panic("hello panic")
    ...

    緊急伝播とリカバリ


    プログラムを開発する際には、迅速に問題を発見し、解決することが重要です.
    サービス導入が開始された後、最も重要なのは死なないことです.
    Facebookがエラーが発生するたびにWebサーバを閉じると、ユーザー体験が悪くなり、リカバリが必要になります.
    開発フェーズでpanicを使用して開発を行う場合、サービスを導入するといえば、これらのpanic関数をすべてクリアしてエラーを返す方法に変換することは困難であり、リカバリ(recover)を行うことができる.
    func recover() interface{}
    // panic()에 넣어주었던 인자를 반환값으로 반환해줌.
    // defer와 함께 사용된다.

    GoはSEHをサポートしていません。


    構造化エラー処理(SEH)構造化エラー.
    try{
    
    } catch {
    
    }
    どうして使わないの?
  • パフォーマンスの問題
  • 誤った問題を食べる(かえって誤った処理を無視する)

    エラー処理はとても重要です!


    通常、エラー処理は面倒で、コードが乱れているため、無視したり無視したりします.
    エラー処理が重要です.
    エラー処理も重要なコードの一部と見なし、エラーを返す関数から返されるエラーを正しく処理します.
    開発段階の誤りを露呈し、早期に発見し、未然に防ぐ.