2012/10/03

Goのイテレータ実装のサンプル

channel を利用したイテレータ実装

GIOの日記より

package main

import (
    "log";
    "time";
)

func FibIter(n int) chan uint64 {
    ch := make(chan uint64);
    go func() {
        var a, b uint64 = 0, 1;
        for i := 0; i < n; i++ {
            ch <- a;
            a, b = b, a + b;
        }
        close(ch);
    }();
    return ch;
}

func main() {
    for i := range FibIter(50) {
        log.Stdout(i);
        time.Sleep(1e8);
    }
}

ただし、goroutine が thread などに比べて軽量だと言っても、数キロバイトを要する。 イテレータのためだけに goroutine を起動するのは、自分の選択には入らなそう。

0 件のコメント:

コメントを投稿