Екатерина обнови решението на 07.11.2015 18:38 (преди над 2 години)
+package main
+
+import "strconv"
+
+func OrderedLogDrainer(logs chan (chan string)) chan string {
+ result := make(chan string)
+ bufchans := make(chan (chan string), 100)
+
+ go func() {
+ for log := range logs {
+ log := log
+ buffered := make(chan string, 100)
+ go func() {
+ for s := range log {
+ buffered <- s
+ }
+ close(buffered)
+ }()
+ bufchans <- buffered
+ }
+ close(bufchans)
+ }()
+
+ go func() {
+ var ind int
+ for bc := range bufchans {
+ ind++
+ for s := range bc {
+ result <- strconv.Itoa(ind) + "\t" + s
+ }
+ }
+ close(result)
+ }()
+
+ return result
+}
супер кратко и ясно решение. Виждам само един потенциален проблем: в условието сме написали, че по всеки лог ще бъдат пратени максимум 100 съобщения, но никъде не сме казали, че ще има под 100 log-а :)