> 백엔드 개발 > Golang > golang의 제네릭의 특정 애플리케이션 시나리오

golang의 제네릭의 특정 애플리케이션 시나리오

WBOY
풀어 주다: 2024-05-04 11:45:02
원래의
695명이 탐색했습니다.

Go의 제네릭 적용 시나리오: 컬렉션 작업: 필터링과 같이 모든 유형에 적합한 컬렉션 작업을 만듭니다. 데이터 구조: 큐, 스택, 맵과 같은 범용 데이터 구조를 작성하여 다양한 유형의 데이터를 저장하고 조작합니다. 알고리즘: 다양한 유형의 데이터를 처리할 수 있는 정렬, 검색, 축소 등의 범용 알고리즘을 작성합니다.

golang의 제네릭의 특정 애플리케이션 시나리오

Go에서 제네릭의 특정 애플리케이션 시나리오

제네릭은 Go 1.18에 도입된 주요 기능으로, 유형 시스템에서 유형 변수를 사용할 수 있게 해줍니다. 이는 특히 공통 데이터 구조나 알고리즘을 구현할 때 코드 재사용 및 중복성 감소를 위한 강력한 기능을 제공합니다.

1. 집합 연산

제네릭을 사용하면 모든 유형 T에 적용되는 집합 연산을 쉽게 만들 수 있습니다. 예:

func Filter[T any](slice []T, pred func(T) bool) []T {
    var filtered []T
    for _, v := range slice {
        if pred(v) {
            filtered = append(filtered, v)
        }
    }
    return filtered
}
로그인 후 복사

2. 데이터 구조

Generics는 큐, 스택 또는 맵과 같은 일반적인 데이터 구조를 작성하는 데 도움이 될 수 있습니다. 이러한 데이터 구조는 다양한 유형의 데이터를 저장하고 조작할 수 있어 더 큰 유연성을 제공합니다.

type Queue[T any] struct {
    items []T
}

func (q *Queue[T]) Enqueue(item T) {
    q.items = append(q.items, item)
}

func (q *Queue[T]) Dequeue() T {
    item := q.items[0]
    q.items = q.items[1:]
    return item
}
로그인 후 복사

3. 알고리즘

Generics를 사용하면 정렬, 검색 또는 축소 작업과 같은 범용 알고리즘을 작성할 수도 있습니다. 이러한 알고리즘은 다양한 유형의 데이터를 처리하여 코드 재사용성과 유지 관리성을 보장합니다.

func Sort[T any](slice []T) []T {
    sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] })
    return slice
}
로그인 후 복사

실용 사례: 사용자 정의 정렬 유형

다양한 유형의 데이터를 포함하는 Customer 구조를 고려하세요. Customer 结构:

type Customer struct {
    ID    int
    Name  string
    Age   int
    Score float64
}
로그인 후 복사

我们可以使用泛型编写一个通用的 SortCustomers

func SortCustomers[T comparable](customers []Customer, field T) []Customer {
    sort.Slice(customers, func(i, j int) bool {
        return customers[i][field] < customers[j][field]
    })
    return customers
}
로그인 후 복사

일반을 사용하여 일반 SortCustomers 함수를 작성할 수 있습니다. 모든 필드를 기준으로 고객 정렬:

sortedByID := SortCustomers(customers, customers[0].ID)
sortedByName := SortCustomers(customers, customers[0].Name)
로그인 후 복사
이 기능은 아래와 같이 고객 ID, 이름, 나이 또는 점수를 기준으로 정렬할 수 있습니다. 🎜rrreee

위 내용은 golang의 제네릭의 특정 애플리케이션 시나리오의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿