반복자는 편리하고 표현력이 풍부한 방식으로 컬렉션을 반복하는 데 필수적입니다. 처음에는 채널이 실행 가능한 옵션처럼 보일 수 있지만 푸시 모델 및 메모리 누수 문제로 인해 유용성이 제한됩니다.
클로저:
클로저 반복자를 구현하는 간단한 방법을 제공합니다. 함수 내에서 변수를 캡처하면 함수를 반복자로 사용할 수 있으며, 각 호출은 변수를 증가시키고 해당 값을 반환합니다. 예:
import "fmt" 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) }
장단점과 선택:
접근 방식 선택은 특정 요구 사항에 따라 다릅니다. 채널은 동시 시나리오에 탁월하고 클로저는 유연성과 사용 용이성을 제공하며 명명된 유형은 명확성과 캡슐화를 제공합니다.
함수형 프로그래밍 개념을 활용하여 복잡한 변환을 위해 여러 반복자를 연결할 수 있습니다. 함수는 반복자로 구성되어 매핑, 필터링, 접기와 같은 작업이 가능합니다.
다음은 클로저를 사용하여 반복자를 연결하는 예입니다.
import "fmt" type intGen func() int func newEven() intGen { n := 0 return func() int { n += 2 return n } } func mapInt(g intGen, f func(int) int) intGen { return func() int { return f(g()) } } func square(i int) int { return i * i } func main() { gen := mapInt(newEven(), square) fmt.Println(gen()) fmt.Println(gen()) fmt.Println(gen()) }
Go의 유연성과 확장성을 활용하여 함수 유형, 반복자를 쉽게 결합하여 컬렉션을 효과적으로 변환하고 처리할 수 있습니다.
위 내용은 Go에서 관용적 반복자를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!