Go에 관용적 반복자 구현이 있나요?
반복자를 연상시키는 채널은 range 키워드를 통해 반복을 제공합니다. 그러나 고루틴 누수를 생성하지 않고 이러한 루프를 벗어날 수 없기 때문에 유용성이 제한됩니다. 좀 더 관용적인 반복자 패턴을 찾기 위해 개발자들은 맵, 필터, 축소와 같은 연산자를 사용하여 명시적으로 반복하고 반복자를 결합하는 방법에 대해 질문을 제기했습니다.
클로저 기반 접근 방식
채널이 편리함에도 불구하고 클로저가 더 적합한 경우가 많습니다. 클로저를 사용하면 순차적인 방식으로 값을 생성하는 반복자를 생성할 수 있습니다. 다음은 클로저를 사용하여 짝수에 대한 반복자를 생성하는 예입니다:
func newEven() func() int { n := 0 return func() int { n += 2 return n } }
메서드 기반 접근 방식
클로저가 마음에 들지 않으면 다음을 수행할 수 있습니다. 메소드로 명명된 유형을 사용합니다:
type even int func (e *even) next() int { *e += 2 return int(*e) }
절충점 및 연결
클로저와 방법 사이의 선택에는 절충이 필요합니다. 클로저는 더 유연하고 메소드는 더 명시적인 구조를 제공합니다.
Go에서는 함수의 최고 수준 특성 덕분에 연결이 간단합니다. 다음 예에서는 제곱 함수를 사용하여 짝수 생성기를 연결하는 방법을 보여줍니다.
func mapInt(g intGen, f func(int) int) intGen { return func() int { return f(g()) } } func square(i int) int { return i * i }
위 내용은 Go에서 반복자를 어떻게 관용적으로 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!