golang がエラーを返した場合に正しく処理する方法

王林
リリース: 2019-12-24 15:40:33
オリジナル
3721 人が閲覧しました

golang がエラーを返した場合に正しく処理する方法

正しい処理方法:

1. 失敗の理由が 1 つだけの場合は、error

For を使用しないでください。例:

func (self *AgentContext) CheckHostType(host_type string) error {
    switch host_type {
    case "virtual_machine":        
                return nil
    case "bare_metal":    
            return nil
    }
    return errors.New("CheckHostType ERROR:" + host_type)
}
ログイン後にコピー

この関数が失敗する理由は 1 つだけであることがわかります。したがって、戻り値の型はエラーではなく bool である必要があります。コードをリファクタリングします:

func (self *AgentContext) IsValidHostType(hostType string) bool {
    return hostType == "virtual_machine" || hostType == "bare_metal"}
ログイン後にコピー

説明: ほとんどの場合、「失敗には複数の理由があります。特に I/O 操作では、ユーザーはより多くのエラー情報を知る必要があります。現時点では、戻り値の型は単純な bool ではなく、エラーになります。」

2. 失敗がない場合はエラーを使用しないでください

エラーは Golang で非常に人気があるため、多くの人は関数を設計するときに何も気にしません。失敗の理由がない場合でもエラーが発生します。

サンプル コードを見てみましょう:

func (self *CniParam) setTenantId() error {
    self.TenantId = self.PodNs    
    return nil}
ログイン後にコピー

上記の関数設計の場合、次の呼び出しコードがあります:

err := self.setTenantId()
if err != nil {
    // log
    // free resource
    return errors.New(...)
}
ログイン後にコピー

正しいコードに基づいてコードをリファクタリングします。姿勢 :

func (self *CniParam) setTenantId() {
    self.TenantId = self.PodNs
}
ログイン後にコピー

その後、呼び出しコードは次のようになります:

self.setTenantId()
ログイン後にコピー

3. エラーは戻り値の型リストの最後に配置される必要があります

For戻り値の型 error 。エラー情報を渡すために使用され、通常は Golang の最後に配置されます。

resp, err := http.Get(url)
if err != nil {    
    return nill, err
}
ログイン後にコピー

戻り値の型が bool の場合も同様です。

value, ok := cache.Lookup(key) 
if !ok {    
// ...cache[key] does not exist… 
}
ログイン後にコピー

4. エラーがレイヤーごとに渡されると、各レイヤーにログが追加されます

各レイヤーにログを追加すると、障害の位置を特定するのに非常に便利です。

おすすめの関連記事とチュートリアル: golang チュートリアル

以上がgolang がエラーを返した場合に正しく処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート