## Вопросы по языку Golang ### 8. Как задать направление канала? Мы можем задать направление передачи сообщений в канале, сделав его только отправляющим или принимающим. Например: ```go func f(c chan<- string) ``` и канал `c` будет только отправлять сообщение. Попытка получить сообщение из канала c вызовет ошибку компилирования. Также мы можем изменить функцию `f`: ```go func f(c <-chan string) ``` Существуют и двунаправленные каналы, которые могут быть переданы в функцию, принимающую только принимающие или отправляющие каналы. Но только отправляющие или принимающие каналы не могут быть переданы в функцию, требующую двунаправленного канала! ### 9. Напишите собственную функцию Sleep, используя time.After ```go func sleep(s int) { <- time.After(time.Second * time.Duration(s)): } ``` ### 10. Что такое буферизированный канал? Как создать такой канал с ёмкостью в 20 сообщений? При инициализации канала можно использовать второй параметр: ```go c := make(chan int, 1) ``` и мы получим буферизированный канал с ёмкостью __1__. Обычно каналы работают синхронно - каждая из сторон ждёт, когда другая сможет получить или передать сообщение. Но буферизованный канал работает асинхронно — получение или отправка сообщения не заставляют стороны останавливаться. Но канал теряет пропускную способность, когда он занят, в данном случае, если мы отправим в канал __1__ сообщение, то мы не сможем отправить туда ещё одно до тех пор, пока первое не будет получено. ### 11. Напишите программу, которая меняет местами два числа (x := 1; y := 2; swap(&x, &y) должно дать x=2 и y=1) ```go func main() { x := 1 y := 2 swap(&x, &y) fmt.Println(x, y) } func swap(x, y *int) { *x, *y = *y, *x } ``` ### 12. Какое будет значение у переменной x после выполнения программы? ```go func square(x *float64) { *x = *x * *x } func main() { x := 1.5 square(&x) fmt.Println(x) } ``` ### 13. Какое значение примет выражение (true && false) || (false && true) || !(false && false)? ```go fmt.Println((true && false) || (false && true) || !(false && false)) // true ``` ### 14. Мы знаем, что в десятичной системе самое большое число из одной цифры - это 9, а из двух - 99. В бинарной системе самое большое число из двух цифр это 11 (3), самое большое число из трех цифр это 111 (7) и самое большое число из 4 цифр это 1111 (15). Вопрос: каково самое большое число из 8 цифр? (Подсказка: 101-1=9 и 102-1=99) ### 15. Что выведет следующая программа? ```go package main import "fmt" func main() { i := 65 fmt.Println(string(i)) } ``` **Варианты:** 1. A 2. 65 3. Ошибка компиляции 4. Нет правильного ответа 5. Я не знаю
Ответ **Ответ:** А