У меня есть файл:goroutine проходит только половину значений через канал
package main
import "fmt"
func
combinations(result chan []byte, len int, min byte, max byte) {
res := make([]byte,len)
for i := 0; i < len; i++ {
res[i] = min
}
result <- res
for true {
i := 0
for i = 0; i < len; i++ {
if res[i] < max {
res[i] = res[i] + 1;
break
} else {
res[i] = 32
}
}
result <- res
if(i == len) {
close(result)
return;
}
}
}
func
main() {
combination_chan := make(chan []byte)
go combinations(combination_chan, 2, 0, 5)
for next_combination := range combination_chan {
fmt.Printf("%x\n",next_combination)
}
}
Я ожидаю, что это напечатать все возможные комбинации 2 байта в диапазоне от 0 до 5, IE:
0000
0100
...
0001
...
0505
Однако, это, кажется, пропустить все другое значение, и печатать то же значение дважды, IE:
0100
0100
0300
0300
...
Почему бы это делать это? Я вставил отпечатки перед «результатом < - res», и все это правильно.