Go 1.18의 일반 프로그래밍에는 다음과 같은 매개변수 전달 변경 사항이 도입되었습니다. 유형 추론: 컴파일러는 수동으로 지정하지 않고도 일반 함수와 유형 매개변수를 자동으로 추론합니다. 값 의미: 일반 함수는 값에 대해 작동하며 원래 변수를 수정하지 않습니다. 범용 코드 재사용: 일반 프로그래밍을 사용하면 모든 유형의 데이터를 처리할 수 있는 범용 함수 및 유형을 생성할 수 있으므로 코드 재사용이 가능합니다.
Go 1.18에 일반 프로그래밍이 도입된 후 매개변수 전달이 크게 변경되었습니다. 이제 일반 함수와 유형은 모든 유형의 인수를 허용할 수 있으므로 인수 전달 및 사용 방식이 크게 바뀌었습니다.
Go의 일반 프로그래밍을 사용하면 함수 호출에서 유형 매개변수를 명시적으로 지정할 필요가 없습니다. 이제 컴파일러는 올바른 유형을 자동으로 추론할 수 있으므로 코드가 더욱 간결해지고 읽기 쉬워집니다.
예:
// 使用泛型类型 func Max[T any](a, b T) T { if a > b { return a } return b }
Max
함수를 호출할 때 컴파일러는 a
및 b
가 int 유형이라고 추론할 수 있습니다. </ code>, 명시적으로 지정할 필요가 없습니다. <code>Max
函数时,编译器可以推断出 a
和 b
类型为 int
,无需显式指定:
result := Max(10, 5) // result 类型自动推断为 int
与 Java 等其他语言中的泛型不同,Go 中的泛型函数是对值进行操作的。这意味着函数不会修改原始参数值,而是返回一个带有修改后值的新变量。
例如:
func Increment[T any](x *T) { *x++ }
在这个例子中,Increment
函数对 x
的 值 进行递增操作,而不是原始变量本身。
案例 1:使用泛型函数排序切片
使用泛型编程,我们可以创建通用的 Sort
func Sort[T comparable](arr []T) { for i := 0; i < len(arr)-1; i++ { for j := i + 1; j < len(arr); j++ { if arr[i] > arr[j] { arr[i], arr[j] = arr[j], arr[i] } } } }
Java와 같은 다른 언어의 제네릭과 달리 Go의 제네릭 함수는 값에 대해 작동합니다. 이는 함수가 원래 매개변수 값을 수정하지 않고 수정된 값을 가진 새 변수를 반환한다는 의미입니다.
예:type Queue[T any] struct { data []T } func (q *Queue[T]) Enqueue(item T) { q.data = append(q.data, item) } func (q *Queue[T]) Dequeue() T { if len(q.data) == 0 { return zeroValue[T]() // 返回 T 类型的零值 } item := q.data[0] q.data = q.data[1:] return item }
Increment
함수는 원래 변수 자체가 아닌 x
의 값을 증가시킵니다. Sort
함수를 만들 수 있습니다. 🎜rrreee 🎜🎜사례 2 : 일반 유형을 사용하여 일반 대기열 만들기🎜🎜rrreee🎜결론🎜🎜Go 일반 프로그래밍은 유형 지정을 제거하고 값 의미 체계를 강제하며 범용 코드 재사용을 활성화하여 매개변수 전달을 재정의합니다. 이는 코드 가독성, 유지 관리성 및 유연성을 향상시켜 Go 언어의 가능성을 확장합니다. 🎜위 내용은 매개변수 전달에 대한 Golang 일반 프로그래밍의 영향의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!