Вы имеете в виду эту строку?
x, y := <-c, <-c
Это «назначение кортежа».
В этом случае это будет эквивалентно выполнению:
x := <-c
y := <-c
Таким образом, второе значение, считанное из c
, будет присвоено y
.
Подробнее об этом можно прочитать здесь:
https://golang.org/ref/spec#Assignments
О порядке, в котором значения фактически записываются в c
, поскольку здесь запускаются две независимые программы:
go sum(s[:len(s)/2], c)
go sum(s[len(s)/2:], c)
Порядок, в котором они заканчивают обработку и запись в c
, не «гарантирован», поэтому можно ожидать, что одному из значений будет присвоено x
и y
в разных прогонах.
Поскольку значения добавляются для вычисления окончательного результата, в этом случае это не проблема.