正しい処理方法:
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 サイトの他の関連記事を参照してください。