ホームページ > バックエンド開発 > Golang > golang 関数のベストプラクティスに違反する反例

golang 関数のベストプラクティスに違反する反例

王林
リリース: 2024-05-03 12:18:01
オリジナル
643 人が閲覧しました

機能的なベスト プラクティスに従うことが重要です。次の反例は避けてください。 長すぎる関数 docstring のない関数 出力パラメータ 入れ子になった関数が多すぎる関数 エラー値の代わりにエラー コードを返す

golang 関数のベストプラクティスに違反する反例

# 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 サイトの他の関連記事を参照してください。

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