>  기사  >  백엔드 개발  >  golang 함수의 일반적인 디자인 패턴

golang 함수의 일반적인 디자인 패턴

PHPz
PHPz원래의
2024-04-26 17:51:01482검색

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으로 문의하세요.