> 백엔드 개발 > Golang > Go에서 반복자를 어떻게 관용적으로 구현할 수 있나요?

Go에서 반복자를 어떻게 관용적으로 구현할 수 있나요?

Patricia Arquette
풀어 주다: 2024-12-02 04:48:13
원래의
386명이 탐색했습니다.

How Can I Idiomatically Implement Iterators in Go?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿