ストリームで複数のオブジェクトをエンコードして送信しています。以下のコードに示すようにそれらをデコードし、接続を開いたままにします。最初のオブジェクト以降のすべてのオブジェクトのデコードで、「バッファー内の余分なデータ」エラーが発生します。
func handleAggregatorConnection(conn net.Conn) {
var connectionNumber = connectionCount
connectionCount += 1
log.Println("connection event: starting handle aggregator connection")
dec := gob.NewDecoder(conn)
var colorArrays map[string][]string
colorArrayValue := &colorArrays
var i P
ai := &i
for {
//err := dec.Decode(colorArrayValue)
err := dec.Decode(ai)
if err == nil {
receivedColorResultFromAggregator = true
//log.Printf("received : %+v", colorArrayValue)
log.Println("received:", i)
aggregatorResultMap[connectionNumber] = *colorArrayValue
log.Println("control server: received object from aggregator ", aggregatorR\
esultMap)
} else if err == io.EOF {
log.Println("reached end of stream while" +
"listening to aggregator")
delete(aggregatorResultMap, connectionNumber)
break
} else {
log.Println("error decoding:", err)
break
}
}
log.Println("connection event: closing aggregator connection")
conn.Close()
}