golang Однонаправленные на уровне создания и инициллизации make() каналы - Зачем они нужны
Primary tabs
Forums:
Каналы, которые действильно созданы как однонаправленные, например:
// Создаём канал только для чтения ch := make(<-chan int)
-- на деле могут использовать разве что как моки(заглушки), например:
- у вас есть функция, которая хочет на вход именно канал для записи
- вам в ходе теста не интересно, что именно запишется в канал - мы хотите протестировать какую-то другую часть поведения
-- при выполнении таких условий, выдействительно можете создать однонаправленный канал, но если всё-таки мы захоте тестировать и запись в него - то уже нужно будет перейти к обычной инициализации типа:
ch := make(chan int)
Однонаправленность как ограничение доступа
Также отметим, что Go однонаправленность — это не свойство самого объекта в памяти, а способ интерпретации прав доступа к нему.
make() всегда создает полноценный канал, а вот когда вы передаете ее в функцию, вы «сужаете» права доступа, помечая, что эта функция может только читать или только писать.
- Log in to post comments
- 49 reads