Golang 팀은 유형 시스템과 런타임의 복잡성으로 인해 비용이 너무 많이 든다고 믿고 있으며 이러한 복잡성을 상쇄할 수 있는 좋은 디자인을 아직 찾지 못했습니다.
내장된 맵과 슬라이스에는 실제로 제네릭의 특징이 있습니다. 또한, 인터페이스{}를 사용하여 제네릭의 효과를 얻을 수 있는 컨테이너를 생성할 수 있습니다. 따라서 지금까지 제네릭에 대한 직접적인 지원은 없습니다. + (권장 학습: go )
여기서는 Golang에서 이 문제를 처리하는 방법을 설명하기 위해 몇 가지 예를 사용하려고 합니다. 먼저 버블 정렬 문제를 살펴보겠습니다. 정수 배열의 조각 정렬.package main import ( "fmt" ) func bubbleSort(array []int) { for i := 0; i < len(array); i++ { for j := 0; j < len(array)-i-1; j++ { if array[j] > array[j+1] { array[j], array[j+1] = array[j+1], array[j] } } } } func main() { a1 := []int{3, 2, 6, 10, 7, 4, 6, 5} bubbleSort(a1) fmt.Println(a1) }
위 예제의 출력은 다음과 같습니다.
[2 3 4 5 6 6 7 10]그렇다면 이 bubbleSort가 float 유형 데이터의 정렬을 동시에 지원하거나 문자열 길이에 따라 정렬하도록 하려면 어떻게 해야 할까요? Java와 같은 다른 언어에서는 bubbleSort를 정의하여 일반 정렬을 지원할 수 있지만 Go에서는 이것이 불가능합니다. 이 목적을 달성하기 위해 인터페이스를 사용하여 동일한 기능을 달성할 수 있습니다.
위의 정렬 문제에 대한 응답으로 정렬 단계를 분석할 수 있습니다.
슬라이스 길이를 확인하여 요소를 탐색합니다(Len). 슬라이스의 두 요소를 비교합니다(Less). 비교 시 그 결과에 따라 요소 위치를 교환(Swap)할지 여부가 결정됩니다. 이 시점에서 위 함수를 모든 유형을 지원하는 인터페이스로 분해할 수 있다는 것을 이미 이해했을 것입니다. 다른 유형의 데이터가 이 인터페이스를 구현하는 한 이 인터페이스의 함수를 사용하여 정렬할 수 있습니다.위 내용은 golang은 제네릭을 지원하지 않나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!