機能的なベスト プラクティスに従うことが重要です。次の反例は避けてください。 長すぎる関数 docstring のない関数 出力パラメータ 入れ子になった関数が多すぎる関数 エラー値の代わりにエラー コードを返す
# Go 言語の違反関数 ベスト プラクティスに対する 5 つの反例
Go で高品質のコードを作成する場合、関数のベスト プラクティスに従うことが重要です。次の反例を避けると、保守しやすく、読みやすく、効率的な関数を作成するのに役立ちます。
1. 関数が長すぎる
func DoEverything(a, b int, c string, d bool) (int, error) { if c == "" { return 0, errors.New("c cannot be empty") } if !d { return 1, errors.New("d must be true") } return a + b, nil }
ベスト プラクティス:関数をより小さな再利用可能な関数に分割します。
2. ドキュメント文字列のない関数
func DoSomething(x int) int { return x * x }
ベスト プラクティス:各関数にドキュメント文字列を追加して、その目的、パラメーター、戻り値を説明します。 。
3. 出力パラメータ
func Swap(a, b *int) { tmp := *a *a = *b *b = tmp }
ベスト プラクティス:コードの理解とデバッグが困難になる可能性があるため、出力パラメータの使用は避けてください。
4. 入れ子関数が多すぎます
func Nested(x int) int { if x > 10 { func inner(y int) int { return y + 1 } return inner(x) } return x }
ベスト プラクティス:入れ子関数をメイン関数の外に移動するか、クロージャを使用します。
5. 関数はエラー値の代わりにエラー コードを返します
func OpenFile(name string) int { f, err := os.Open(name) if err != nil { return -1 } return f.Fd() }
ベスト プラクティス:Go 言語の規則に従って、関数はエラー値を返す必要があります。エラーコードの代わりに。
実際的なケース
リストを辞書に変換する必要がある次の関数を考えてみましょう:
// 不遵循最佳实践的示例 func ConvertListToDict(list []string) map[string]bool { dict := make(map[string]bool) for _, v := range list { dict[v] = true } if len(dict) != len(list) { return nil } return dict }
この関数には次の問題があります:
nil
ですが、docstring にはこのケースが説明されていません。nil
を返す際にもあいまいさがあります。次のベスト プラクティスの例
// 遵循最佳实践的示例 func ConvertListToDict(list []string) (map[string]bool, error) { dict := make(map[string]bool) for _, v := range list { if _, ok := dict[v]; ok { return nil, errors.New("duplicate element in list") } dict[v] = true } return dict, nil }
この関数は上記の問題を解決し、重複した要素に対してエラー値を返します。
以上がgolang 関数のベストプラクティスに違反する反例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。