>  기사  >  백엔드 개발  >  golang은 제네릭을 지원하지 않나요?

golang은 제네릭을 지원하지 않나요?

(*-*)浩
(*-*)浩원래의
2019-12-13 14:26:553431검색

golang은 제네릭을 지원하지 않나요?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.