【发布时间】:2017-10-24 05:55:32
【问题描述】:
在阅读nsq源码的nsqlookupd部分时,发现作者使用了一个Context truct来包装一个NSQLookupd struct而没有其他的funcs用于Context。不知道为什么要这样使用,对我们有什么好处可以通过这种方式得到吗?下面的源代码在这里。谢谢!
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)
})
【问题讨论】: