去和回调

Jam*_*dle 5 go

我相信通道的使用比回调更受欢迎,有没有办法用更惯用的通道重写它,或者在这里使用回调可以:

type SomeServer struct { }

func RunSomeServer(callback func(SomeServer)) {
    someServer := SomeServer{}
    // do some other setup
    callback(someServer)
    // tear things down
}

func TestSomeServer(t *testing.T) {
    // some server only exists for the lifetime of the callback
    RunSomeServer(func(someServer SomeServer) {
        // run some tests against some Server
    })
}
Run Code Online (Sandbox Code Playgroud)

One*_*One 5

使用回调是非常可以接受的,特别是对于那种服务器模式,net/*到处都使用它。

但是,频道版本可能类似于:

func RunSomeServer() <- chan *SomeServer {
    ch := make(chan *SomeServer)
    someServer := &SomeServer{}
    go func() {
        for i := 0; i < 10; i++ {
            ch <- someServer //make sure someServer handles concurrent access
        }
        close(ch)
        //tear things down
    }()

    return ch
}

func TestSomeServer(t *testing.T) {
    ch := RunSomeServer()
    for ss := range ch {
        _ = ss
        //do stuff with ss
    }
}
Run Code Online (Sandbox Code Playgroud)