가변 함수에 대한 더 나은 대안은 다음과 같습니다: 슬라이스를 인수로 사용 구조체를 인수로 사용 함수 커링 사용
Go의 가변 함수에 대한 더 나은 대안
Go의 가변 인수 함수를 사용하면 ... 구문. 이는 어떤 경우에는 편리하지만 다음과 같은 제한 사항도 있습니다: ...
语法允许传递任意数量的参数。虽然这在某些情况下很方便,但也有其局限性,包括:
替代方案
有几种替代方案可以替代可变参数函数:
1. 使用切片作为参数:
func max(numbers []int) int { if len(numbers) == 0 { return 0 } max := numbers[0] for _, n := range numbers { if n > max { max = n } } return max }
2. 使用 structs 作为参数:
type Stats struct { Mean float64 Median float64 Mode float64 } func calcStats(nums []float64) Stats { // ... 计算统计数据并填充 `Stats` struct return Stats{ Mean: mean, Median: median, Mode: mode, } }
3. 使用函数柯里化:
柯里化将一个多参数函数转换为一个一系列单参数函数的过程。例如,我们可以对 max
가변 함수의 매개 변수에는 명시적인 유형이 없으므로 유형 검사기가 실패할 수 있습니다. 오류 감지되었습니다.
대안
가변 함수에 대한 몇 가지 대안이 있습니다: 🎜🎜🎜1. 슬라이스를 매개변수로 사용: 🎜🎜func maxCurried(ns ...int) int { return func(n int) int { if n > ns[0] { ns[0] = n } return ns[0] } }🎜🎜2 구조체를 매개변수로 사용: 🎜 🎜
package main import ( "fmt" "time" ) func maxVarargs(nums ...int) int { if len(nums) == 0 { return 0 } max := nums[0] for _, n := range nums { if n > max { max = n } } return max } func maxSlice(nums []int) int { if len(nums) == 0 { return 0 } max := nums[0] for _, n := range nums { if n > max { max = n } } return max } func main() { // 产生一个包含 100 万个随机整数的切片 nums := make([]int, 1000000) for i := range nums { nums[i] = rand.Int() } // 使用可变参数函数计算最大值 start := time.Now() maxVarargs(nums...) elapsedVarargs := time.Since(start) // 使用切片函数计算最大值 start = time.Now() maxSlice(nums) elapsedSlice := time.Since(start) fmt.Println("MaxVarargs execution time:", elapsedVarargs) fmt.Println("MaxSlice execution time:", elapsedSlice) }🎜🎜3 . 함수 커링 사용: 🎜🎜🎜커링은 다중 매개변수 함수를 일련의 단일 매개변수 함수로 변환하는 프로세스입니다. 예를 들어
max
함수를 커리할 수 있습니다. 🎜rrreee🎜🎜실용 사례🎜🎜🎜변수 매개변수를 사용하여 일련의 정수의 최대값을 계산해야 하는 함수가 있다고 가정해 보겠습니다. 함수 및 슬라이스 함수: 🎜rrreee🎜이 프로그램을 실행하면 슬라이스 함수가 가변 함수보다 훨씬 빠르다는 것을 알 수 있습니다. 🎜위 내용은 golang 가변 매개변수에 대한 더 나은 대안이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!