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