0

看了nsq源码的nsqlookupd部分,发现作者使用了一个Context truct来包装一个NSQLookupd struct,而没有其他的func用于Context。不知道为什么要这样用,能从中得到什么好处这边走?下面的源代码在这里。谢谢!

上下文.go

type Context struct {
    nsqlookupd *NSQLookupd
}

nsqlookupd.go

func (l *NSQLookupd) Main() {
ctx := &Context{l}

tcpListener, err := net.Listen("tcp", l.opts.TCPAddress)
if err != nil {
    l.logf(LOG_FATAL, "listen (%s) failed - %s", l.opts.TCPAddress, err)
    os.Exit(1)
}
l.Lock()
l.tcpListener = tcpListener
l.Unlock()
tcpServer := &tcpServer{ctx: ctx}
l.waitGroup.Wrap(func() {
    protocol.TCPServer(tcpListener, tcpServer, l.opts.Logger)
})
4

1 回答 1

0

因为面向未来。

Contextstruct 提供了一种将特定于上下文的数据包装到单个结构中的方法。此时上下文只包含一个指向结构的指针NSQLookupd。但是,如果Context需要以某种方式扩展,那么您所要做的就是向结构添加更多字段。您也可以实现结构方法。

所有这些都不需要更改程序中的内部 API,因为所有这些新字段和方法都被包装到结构中,并且已经在程序中传递。您很可能必须更改 struct 的初始化方式。

于 2017-05-26T17:31:34.217 回答