これを使うと、JSDeferredに似た事が出来る。
cho45.stfuawsc.comサンプルだとこんな感じ。
JSDeferredSimple and clean asynchronous processing.SampleJSDeferred SamplesDownloadjsdeferred.jsNo c...
http://cho45.stfuawsc.com/jsdeferred/
package main
import . "deferred"
import "syscall"
import "http"
import "xml"
import "os"
type feed struct {
    Entry []struct {
        Title string
        Link []struct {
            Rel  string "attr"
            Href string "attr"
        }
        Summary string
    }
}
func main() {
    Deferred().
        Next(func() string {
            return "「この戻り値が...」"
        }).
        Next(func(v string) {
            println("ここの引数にくる!:" + v);
        }).
        Next(func() {
            println("かけっこすものよっといで!");
        }).
        Loop(3, func(i int) {
            println(string("ABC"[i]) + ":はい!");
        }).
        Next(func() {
            println("位置についてよーいどん!");
        }).
        Parallel([]interface{} {
            func() {
                println("A:一番手だしちょっと昼寝してから行くか");
                syscall.Sleep(1000*1000*300);
                println("A:ちょwww");
            },
            func() {
                syscall.Sleep(1000*1000*200);
                println("B:たぶん2位かな?");
            },
            func() {
                syscall.Sleep(1000*1000*100);
                println("C:俺いっちばーん!");
            },
        }).
        Next(func() {
            println("しゅーりょー!");
        }).
        Next(func() {
            println("otsune:ネットウォッチでもするか!");
        }).
        HttpGet("http://b.hatena.ne.jp/otsune/atomfeed").
        Next(func(res *http.Response) *feed {
            var f feed;
            xml.Unmarshal(res.Body, &f);
            return &f
        }).
        Next(func(f *feed) {
            for _, entry := range f.Entry {
                println(entry.Title + "\n\t" + entry.Link[0].Href);
            }
        }).
        HttpGet("http://b.hatena.ne.otsune/"). // this make error
        Next(func(res *http.Response) {
            println("ここにはこないよ");
        }).
        Error(func(err *os.Error) {
            println("これはひどい");
        })
}
Goでは例外がcatch出来ない(そもそもthrowがない)のだけど、Goの風習で戻り値の最後にos.Errorを返す風習があるので、その場合はErrorに飛ばす様にしてある。mattn's godeferred at master - GitHub使い道あるか分かんないけど、とりあえず...
port of jsdeferred: http://cho45.stfuawsc.com/jsdeferred
http://github.com/mattn/godeferred
※あんましJSDeferredの仕様詳しく無いので正しい動きじゃないかも苦笑