mirror of
https://github.com/goavengers/go-interview.git
synced 2026-02-04 04:36:19 +00:00
Added QA
This commit is contained in:
@@ -1 +1,35 @@
|
|||||||
### <a name="golang_questions"></a>Вопросы по языку Golang
|
## <a name="golang_questions"></a> Вопросы по языку Golang
|
||||||
|
|
||||||
|
### <a name="8"></a> 8. Как задать направление канала?
|
||||||
|
|
||||||
|
Мы можем задать направление передачи сообщений в канале, сделав его только отправляющим или принимающим. Например:
|
||||||
|
|
||||||
|
```go
|
||||||
|
func f(c chan<- string)
|
||||||
|
```
|
||||||
|
|
||||||
|
и канал `c` будет только отправлять сообщение. Попытка получить сообщение из канала c вызовет ошибку компилирования. Также мы можем изменить функцию `f`:
|
||||||
|
|
||||||
|
```go
|
||||||
|
func f(c <-chan string)
|
||||||
|
```
|
||||||
|
|
||||||
|
Существуют и двунаправленные каналы, которые могут быть переданы в функцию, принимающую только принимающие или отправляющие каналы. Но только отправляющие или принимающие каналы не могут быть переданы в функцию, требующую двунаправленного канала!
|
||||||
|
|
||||||
|
### <a name="9"></a> 9. Напишите собственную функцию Sleep, используя time.After
|
||||||
|
|
||||||
|
```go
|
||||||
|
func sleep(s int) {
|
||||||
|
<- time.After(time.Second * time.Duration(s)):
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### <a name="10"></a> 10. Что такое буферизированный канал? Как создать такой канал с ёмкостью в 20 сообщений?
|
||||||
|
|
||||||
|
При инициализации канала можно использовать второй параметр:
|
||||||
|
|
||||||
|
```go
|
||||||
|
c := make(chan int, 1)
|
||||||
|
```
|
||||||
|
|
||||||
|
и мы получим буферизированный канал с ёмкостью __1__. Обычно каналы работают синхронно - каждая из сторон ждёт, когда другая сможет получить или передать сообщение. Но буферизованный канал работает асинхронно — получение или отправка сообщения не заставляют стороны останавливаться. Но канал теряет пропускную способность, когда он занят, в данном случае, если мы отправим в канал __1__ сообщение, то мы не сможем отправить туда ещё одно до тех пор, пока первое не будет получено.
|
||||||
|
|||||||
Reference in New Issue
Block a user