Я учусь golang в течение некоторого времени. Я столкнулся с проблемой с каналами. У меня есть 2 примера. Они выглядят одинаково, но 1 из них дает ошибку. Когда я назначаю пропускную способность канала (преобразование в буферизованный канал), проблема решается, но другой пример не имеет назначения пропускной способности.
Это мой первый вопрос.
1-й код https://play.golang.org/p/dbC7ZZsagin
// Creating a channel
// Using make() function
mychnl := make(chan string)
// Anonymous goroutine
go func() {
mychnl <- "GFG"
mychnl <- "gfg"
mychnl <- "Geeks"
mychnl <- "GeeksforGeeks"
close(mychnl)
}()
// Using for loop
for res := range mychnl {
fmt.Println(res)
}
2-й код https://play.golang.org/p/yQMclmwOYs9
// We'll iterate over 2 values in the `queue` channel.
queue := make(chan string, 2)
queue <- "one"
queue <- "two"
close(queue)
// This `range` iterates over each element as it's
// received from `queue`. Because we `close`d the
// channel above, the iteration terminates after
// receiving the 2 elements.
for elem := range queue {
fmt.Println(elem)
}
Если вы удалите номер емкости во втором коде, программа не будет работать, и я не знаю почему. Я подумал, что, возможно, для итерации диапазона необходимо было присвоить значение емкости, но есть еще один код, который работает.
Спасибо, теперь.