การสร้าง Iterator Function ด้วย Channel ใน Golang

ในภาษารุ่นใหม่ มักจะมีคุณสมบัติในการสร้าง Iterator Function หรือในบางภาษาจะเรียกว่า Generator เพื่อใช้สำหรับการเข้าถึงข้อมูลเป็นชุดด้วยการวนลูปและประมวลผล ใน Golang ก็สามารถสร้าง Iterator Function ได้ แต่ต้องมีการใช้ Channel มาช่วยในการผลิต Iterator โดยผมได้เขียน code ตัวอย่างไว้ สำหรับผู้ที่สนใจดังนี้ครับ

File : test.go

package main

import (
    "fmt"
)

func it(n int) <- chan int {
    ch := make(chan int)
    go func() {
        for i:=0; i<n; i++ {
            ch <- i
        }
        close(ch)
    }()
    return ch
}

func main() {
    for v := range it(10) {
        fmt.Printf("%d\n", v)
    }
}