GOLANG_INTERVIEW Telegram 483
👣 Как понять, что канал Go закрыт для записи?

Сразу перейдём к примеру. Закрытый канал не блокируется на чтение. Вот, тут довольно наглядно:
Loop:
for {
select {
case val, ok :=<- someChan:
if !ok {
// канал закрыт
break Loop
}
// получены данные, работа с val
default:
// канал пуст, что-то делать
}
}

Здесь, ok будет истиной только для открытого канала. Но при закрытии по каналу будут приходить пустые сообщения постоянно и ok будет ложью.

Однако вышеприведённая конструкция оптимальна только если нужно выполнять действие в default-ветке. Т.е. что-то делать, когда сообщений нет. Есть более простая и понятная конструкция
for val := range someChan {
// получено сообщение
}
// канал закрыт

В этом случае канал читается, используя for-range. Когда канал будет закрыт и из него будет прочитано последнее сообщение, произойдёт выход из цикла.


Запись

Запись в закрытый канал вызывает панику.
Дизайн приложения должен быть таким, что сторона создающая канал, его же и закрывает и пишет в него то же она. Более того, в этих случая рекомендуется, что б функция возвращала канал только для чтения
func run () <-chan string {
c := make(chan string)
// [...]
}



recover()

Конечно можно в отложенном вызове вызвать recover(), чтобы подавить панику. Но это в корне неправильно.

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥3🥰2



tgoop.com/golang_interview/483
Create:
Last Update:

👣 Как понять, что канал Go закрыт для записи?

Сразу перейдём к примеру. Закрытый канал не блокируется на чтение. Вот, тут довольно наглядно:

Loop:
for {
select {
case val, ok :=<- someChan:
if !ok {
// канал закрыт
break Loop
}
// получены данные, работа с val
default:
// канал пуст, что-то делать
}
}

Здесь, ok будет истиной только для открытого канала. Но при закрытии по каналу будут приходить пустые сообщения постоянно и ok будет ложью.

Однако вышеприведённая конструкция оптимальна только если нужно выполнять действие в default-ветке. Т.е. что-то делать, когда сообщений нет. Есть более простая и понятная конструкция
for val := range someChan {
// получено сообщение
}
// канал закрыт

В этом случае канал читается, используя for-range. Когда канал будет закрыт и из него будет прочитано последнее сообщение, произойдёт выход из цикла.


Запись

Запись в закрытый канал вызывает панику.
Дизайн приложения должен быть таким, что сторона создающая канал, его же и закрывает и пишет в него то же она. Более того, в этих случая рекомендуется, что б функция возвращала канал только для чтения
func run () <-chan string {
c := make(chan string)
// [...]
}



recover()

Конечно можно в отложенном вызове вызвать recover(), чтобы подавить панику. Но это в корне неправильно.

@golang_interview

BY Golang вопросы собеседований




Share with your friend now:
tgoop.com/golang_interview/483

View MORE
Open in Telegram


Telegram News

Date: |

A vandalised bank during the 2019 protest. File photo: May James/HKFP. 3How to create a Telegram channel? Just at this time, Bitcoin and the broader crypto market have dropped to new 2022 lows. The Bitcoin price has tanked 10 percent dropping to $20,000. On the other hand, the altcoin space is witnessing even more brutal correction. Bitcoin has dropped nearly 60 percent year-to-date and more than 70 percent since its all-time high in November 2021. Today, we will address Telegram channels and how to use them for maximum benefit. Judge Hui described Ng as inciting others to “commit a massacre” with three posts teaching people to make “toxic chlorine gas bombs,” target police stations, police quarters and the city’s metro stations. This offence was “rather serious,” the court said.
from us


Telegram Golang вопросы собеседований
FROM American