Golang 제네릭 예제

Golang Jenelig Yeje



Golang의 제네릭 기능을 사용하면 유형이 안전하고 다양한 유형과 호환되는 재사용 가능한 코드를 만들 수 있습니다. 다행스럽게도 Go에 제네릭이 추가되면서 코드 재사용 및 유연성을 위한 새로운 길이 열렸습니다. 최신 버전의 Golang은 제네릭에 대한 기대가 큰 지원을 제공합니다.

더 중요한 것은 제네릭이 컴파일 타임에 정적 유형 검사를 가능하게 하고 유형 정확성을 보장하는 Go의 강력한 유형 안전성을 유지한다는 것입니다. 명확성과 유지 관리성을 향상시키는 일반 코드 내에서 표준화된 오류 처리를 제공합니다. 또한 일반 코드 내에서 표준화된 오류 처리를 제공하여 명확성과 유지 관리성을 향상시킵니다. 이 게시물에서는 몇 가지 실제 Go 제네릭 애플리케이션과 예제를 살펴보겠습니다.

예제 1: Golang 제네릭 함수 사용

제네릭의 주요 사용 사례 중 하나는 고유한 형식에서 작동할 수 있는 함수를 만드는 것입니다. 여기서는 일반 원주 함수가 사용되는 예 중 하나를 살펴보겠습니다.







패키지 기본
수입 'fmt'
기능 둘레 [ 아르 자형 정수 | float32 ]( 반지름 r ) {
:= * 2 * 반지름
fmt . Println ( '일반적인 둘레는 다음과 같습니다. ' , )
}
기능 기본 () {
~였다 r1 정수 = 7
~였다 r2 float32 = 7 . 5
둘레 ( r1 )
둘레 ( r2 )
}

이전 코드의 시작 부분에서 라인은 출력을 콘솔에 인쇄하는 것을 포함하여 형식화된 I/O에 대한 기능을 제공하는 'fmt' 패키지를 가져옵니다. 그런 다음 'int' 또는 'float32'일 수 있는 일반 유형 'r'의 매개변수 반지름을 사용하는 'circumference'라는 일반 함수를 정의합니다. 함수 내에서 반지름에 상수 값 '3'을 곱한 다음 '2'를 곱하여 원주를 계산합니다. 마지막으로 'fmt.Println'을 사용하여 계산된 둘레를 인쇄합니다.

다음으로 두 개의 변수 r1과 r2가 선언되고 각각 값 7과 7.5가 할당되는 main 함수가 있습니다. 그런 다음 'circumference' 함수가 두 번 호출되어 r1과 r2를 인수로 전달합니다.

출력은 다음과 같이 원의 둘레를 인쇄하여 계산을 표시합니다.

예 2: Golang 일반 인터페이스 사용

또한 Golang 제네릭은 인터페이스를 지원합니다. Go의 인터페이스는 코드 재사용 및 다형성을 용이하게 하는 중요한 도구입니다. 제네릭은 많은 유형과 함께 기능할 수 있도록 하여 인터페이스의 성능을 높입니다. 다음은 Golang 제네릭 인터페이스의 소스 코드입니다.

패키지 기본
수입 'fmt'
유형 고용량 상호 작용 {
int64 | int32 | float32 | float64
}
기능 newGenericFunc [ 나이 나이 ]( emp_Age 나이 ) {
:= 정수 ( emp_Age ) + 1
fmt . Println ( )
}
기능 기본 () {
fmt . Println ( '직원 나이' )
~였다 1세 int64 = 24
~였다 2세 float64 = 25 . 5
newGenericFunc ( 1세 )
newGenericFunc ( 2세 )
}

이전 소스 코드에서 직원의 나이에 가능한 유형을 지정하는 'EmpAge'라는 인터페이스를 정의했습니다. 인터페이스에는 int64, int32, float32 및 float64 유형이 포함됩니다. 이 인터페이스를 사용하면 '일반' 함수가 이러한 유형을 인수로 허용할 수 있습니다. 그런 다음 EmpAge 인터페이스를 만족하는 모든 유형이 될 수 있는 일반 유형의 age의 emp_Age 매개변수를 취하는 newGenericFunc라는 일반 함수를 사용합니다. 함수 내에서 emp_Age를 int로 변환하고 표시된 대로 1씩 증가시킵니다.

다음으로 두 개의 변수 Age1과 Age2를 선언하고 main 함수에서 각각 24와 25.5의 값을 할당합니다. 그런 다음 Age1 및 Age2는 두 번 실행되는 newGenericFunc 함수에 매개 변수로 전달됩니다. 이를 통해 연령을 1씩 올리고 업데이트된 값을 생성합니다.

다음에서 생성되는 출력은 인터페이스를 활용하는 일반 함수의 수명입니다.

예 3: Golang 일반 데이터 구조 사용

또한 Go 제네릭은 스택, 대기열 및 연결 목록과 같은 일반 데이터 구조를 구축할 수 있는 기능도 제공합니다. 다음에서 일반 스택의 구현을 고려하십시오.

수입 'fmt'
유형 스택 [ 아무거나 ] []
기능 ( * 스택 [ ]) 푸시 ( 항목 T ) {
= 추가 ( * , 안건 )
}
기능 ( * 스택 [ ]) () {
만약에 오직 ( * ) == 0 {
공황 ( '스택에 아무것도 없음' )
}
색인 := 오직 ( * ) - 1
안건 := ( * )[ 색인 ]
* = ( * )[: 색인 ]
반품 안건
}
기능 기본 () {
스택 := 새로운 ( 스택 [ 정수 ])
스택 . 푸시 ( 1 )
스택 . 푸시 ( 2 )
스택 . 푸시 ( )
fmt . Println ( 스택 . ())
fmt . Println ( 스택 . ())
fmt . Println ( 스택 . ())
}

이전 코드에서 스택을 나타내는 'Stack'이라는 제네릭 유형이 정의되었습니다. 'T' 자리 표시자는 스택이 모든 유형의 요소를 보유하도록 허용합니다. 'Stack' 유형은 'T' 유형 요소의 슬라이스로 구현됩니다. 여기에서 'Stack' 유형에 대해 'Push' 및 'Pop'의 두 가지 기능이 배포됩니다. Push() 함수는 스택에 요소를 추가하는 역할을 합니다. 'T' 유형의 인수 항목을 가져와서 append() 함수를 사용하여 기본 슬라이스에 추가합니다.

Pop() 함수는 스택에서 초기 구성 요소를 가져와 반환하는 동안 먼저 기본 슬라이스의 크기를 평가하여 스택이 비어 있는지 여부를 확인합니다. 스택이 비어 있어 패닉이 발생하면 오류 알림이 전송됩니다. 그렇지 않으면 슬라이스에서 마지막 요소를 검색하고 슬라이스를 마지막에서 두 번째 요소까지 슬라이스하여 스택에서 제거하고 제거된 항목을 반환합니다.

다음으로 이 코드의 기본 함수 내에서 Stack[int] 구문을 사용하여 새로운 정수 스택을 만듭니다. 그런 다음 'Push' 메서드를 세 번 호출하여 정수 1, 2, 3을 스택에 추가합니다. 그러나 'Pop' 메서드는 스택에서 요소를 검색하고 인쇄하기 위해 이후 세 번 호출됩니다.

다음 출력은 스택에서 요소가 역순으로 제거되었음을 나타냅니다.

예제 4: Golang 일반 제약 조건 사용

Go는 또한 뛰어난 유연성을 제공하고 애플리케이션 요구 사항에 따라 일반 구성에 대한 특정 요구 사항을 정의하는 사용자 지정 제약 조건을 제공합니다. 사용자 지정 일반 제약 조건의 코드는 데모를 위해 다음과 같이 제공됩니다.

패키지 기본
수입 'fmt'
유형 숫자 상호 작용 {
int64 | float64
}
기능 기본 () {
부동 값 := [] float64 { 2 . 0 , 4 . 0 , 6 . 0 , 8 . 0 , 10 . 0 }
정수값 := [] int64 { 2 , 4 , 6 , 8 , 10 }
합계1 := genericSum ( 부동 값 )
합계2 := genericSum ( 정수값
fmt . Println ( 'float64의 합:' , 합계1 )
fmt . Println ( 'int64의 합계:' , 합계2 )

}
기능 genericSum [ n 숫자 ]( 숫자 [] N ) N {
~였다 나는 N입니다
~을 위한 _ , 하나에 := 범위 숫자 {
합집합 += 하나에
}
반품 합집합
}

이전 소스 코드에서는 'Sum' 메서드로 Numerics 인터페이스를 정의했습니다. 그런 다음 각각의 'Sum' 메서드를 제공하여 Numerics 인터페이스를 구현하는 'FloatValue' 및 'IntegerValue'라는 두 가지 사용자 지정 유형을 만듭니다. genericSum 함수는 이제 Numerics 인터페이스를 만족하는 모든 유형의 슬라이스를 허용할 수 있습니다. 함수 내에서 요소를 반복하고 'Sum' 메서드를 호출하여 합계를 계산합니다. 마지막으로 main 함수에서 FloatValue 및 IntegerValue의 조각을 만들고 각 조각의 요소 합계를 올바르게 계산하는 genericSum() 함수에 전달합니다.

이제 예상 출력이 다음 화면에 표시됩니다.

결론

제네릭 데이터 구조 및 제네릭 함수 생성, 제네릭 인터페이스 정의 및 사용자 정의 유형 제약 조건 사용을 포함하는 Go 제네릭의 몇 가지 실용적인 예를 살펴보았습니다. 이러한 예는 제네릭이 Go 프로그래밍 언어에 제공하는 강력함과 유연성을 보여줍니다. 컴파일 중 제네릭 코드 생성은 효율적인 바이너리 크기와 컴파일 시간을 보장합니다.