ホームページ > バックエンド開発 > Golang > golang 関数の一般的な設計パターン

golang 関数の一般的な設計パターン

PHPz
リリース: 2024-04-26 17:51:01
オリジナル
544 人が閲覧しました

Go 言語の関数設計パターンは、コードの可読性、保守性、再利用性を向上させるために使用されます。次のものが含まれます。 入出力パラメータ: 関数がパラメータを通じて呼び出し元の値を変更できるようにします。複数の値を返す: コードを簡素化し、グローバル変数の使用を避けます。パラメーターとしての関数: 柔軟でカスタマイズ可能なコードを作成します。

golang 関数の一般的な設計パターン

Go 言語関数の一般的な設計パターン

この記事では、コードの読みやすさを向上させる、Go 言語の一般的な関数設計パターンを紹介します。メンテナンス性と再利用性。

入力/出力パラメータ

入力/出力パラメータを使用すると、関数はパラメータを通じて呼び出し元の値を変更できます。たとえば、関数内で 2 つの値の順序を交換できます:

func swap(a, b *int) {
    *a, *b = *b, *a
}
ログイン後にコピー

実用的なケース: 並べ替え用の補助関数:

func sort(arr []int) {
    for i := 0; i < len(arr); i++ {
        for j := i + 1; j < len(arr); j++ {
            if arr[i] > arr[j] {
                swap(&arr[i], &arr[j])
            }
        }
    }
}
ログイン後にコピー

複数の値を返す

Go 言語では、関数が複数の値を返すことができます。これによりコードが簡素化され、グローバル変数の使用が回避されます。たとえば、配列から最小値と最大値を取得する関数を使用できます:

func minMax(arr []int) (int, int) {
    min := arr[0]
    max := arr[0]
    for _, v := range arr {
        if v < min {
            min = v
        }
        if v > max {
            max = v
        }
    }
    return min, max
}
ログイン後にコピー

実際のケース: 統計を計算する関数:

func stats(arr []int) (float64, float64) {
    sum := 0
    for _, v := range arr {
        sum += v
    }
    average := float64(sum) / float64(len(arr))
    return average, float64(minMax(arr)[0] + minMax(arr)[1]) / 2
}
ログイン後にコピー

パラメータとしての関数

Go 関数はパラメータとして他の関数に渡すことができます。これにより、柔軟でカスタマイズ可能なコードを作成できます。たとえば、関数をコンパレータ関数として使用できます:

type Person struct {
    Name string
    Age  int
}

func compareByName(a, b Person) int {
    return strings.Compare(a.Name, b.Name)
}

func sortByName(people []Person) {
    sort.Slice(people, func(i, j int) bool { return compareByName(people[i], people[j]) < 0 })
}
ログイン後にコピー

実用的な例: さまざまなフィールドに従って構造をスライスするためのユニバーサル ソート関数:

func sortBy(slice interface{}, less func(i, j interface{}) bool) {
    sort.Slice(slice, func(i, j int) bool { return less(slice[i], slice[j]) })
}
ログイン後にコピー

以上がgolang 関数の一般的な設計パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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