2017-05-24 2 views
0

nsqソースコードのnsqlookupdの部分を読むと、作者がNSQLookupd構造体をラップするためにContext構造体を使用し、Context.Iには他のfuncsを使用していないことがわかりました。この方法で取得しますか?以下はソースコードです。ありがとうございました!なぜnsqlookupdパッケージがContextを使用していますか?

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) 
}) 

答えて

0

ため、将来プルーフnsqlookupd.go context.go

type Context struct { 
    nsqlookupd *NSQLookupd 
} 

Context structは、コンテキスト固有のデータを単一の構造体にラップする方法を提供します。この時点で、コンテキストにはNSQLookupd構造体への唯一のポインタが含まれています。しかし、Contextを何とか拡張する必要がある場合は、構造体にフィールドを追加するだけです。 structメソッドも実装できます。

これらすべての新しいフィールドとメソッドは構造体にラップされており、プログラム内で既に渡されているため、プログラムの内部APIに変更を加える必要はありません。構造体が初期化される方法を変更する必要があります。

+0

クール!ありがとうございました! –

関連する問題