Вот такой код
package main
import (
"encoding/json"
"fmt"
)
type Test1 map[string]interface{}
var c chan Test1
func main() {
val := Test1{
"s": 1,
"w": 2,
}
c = make(chan Test1, 3)
go run()
for i := 0; i < 10; i++ {
val["v"] = i
c <- val
}
}
func run() {
for {
a := <-c
out, _ := json.Marshal(a)
fmt.Println(string(out))
}
}
Возращает
{"s":1,"v":3,"w":2}
{"s":1,"v":4,"w":2}
{"s":1,"v":4,"w":2}
{"s":1,"v":4,"w":2}
{"s":1,"v":4,"w":2}
{"s":1,"v":9,"w":2}
{"s":1,"v":9,"w":2}
{"s":1,"v":9,"w":2}
{"s":1,"v":9,"w":2}
{"s":1,"v":9,"w":2}
Почему порядок не 1,2,3,4, ну или рэндом не обязательно по порядку, но главно почему пропущены некотрые цифры. Как это справить не меняя структуры? Это просто небольшая реплика проблемы большой программы.
Короче есть цикл, у нем идет обработка данных и отправка в канал. Оптарляется структура. Большоая часть струтуры заполняется до цикла. В цикле много условий, если там дублировать то будет месево.