Я изучаю каналы, и примеры из учебников кажутся простыми и легкими для понимания.Тем не менее я не могу понять следующее поведение.
func main() {
message := make(chan string)
message <- "ping"
fmt.Println(<-message)
}
Почему приведенное выше приводит к ошибке?Я понимаю, что могу заставить его работать, введя стандартную процедуру, чтобы подготовить отправителя и получателя.Однако, если это так, почему работает следующее:
func main() {
message := make(chan string,1)
message <- "ping"
fmt.Println(<-message)
}
********* Спасибо Джо МакМэхон за ваш ответ ****************** Документирование ниже для моей справки *********Я предположил, что буфер 1 (в отличие от 2) также будет блокировать основную процедуру, пока не найдет соответствующий приемник.Кажется, что буфер 1 работает как 0 & 1 и не блокирует код для 0-й записи / чтения.Чтобы продемонстрировать блок с использованием буферов,
func main() {
message := make(chan string, 1)
message <- "ping1"
message <- "ping2"
fmt.Println(<-message) //Unreachable code.
}