首頁  >  文章  >  後端開發  >  golang函數的通用設計模式

golang函數的通用設計模式

PHPz
PHPz原創
2024-04-26 17:51:01517瀏覽

Go 語言函數設計模式用於提高程式碼可讀性、可維護性和可重複使用性,包括:輸入/輸出參數:允許函數透過參數修改呼叫方的值。傳回多個值:簡化程式碼,避免使用全域變數。函數作為參數:建立靈活、可自訂的程式碼。

golang函數的通用設計模式

Go 語言函數中的通用設計模式

本文介紹了Go 語言中常見的函數設計模式,這些模式可以提高程式碼的可讀性、可維護性和可重複使用性。

輸入/輸出參數

輸入/輸出參數允許函數透過參數修改呼叫方的值。例如,我們可以在函數中交換兩個值的順序:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn