## Вопросы по языку 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. Я не знаю
Ответ
**Ответ:** А