You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ru/03.4.md
+10-10
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@
4
4
5
5
## Использование горутин в функции Conn
6
6
7
-
В отличии от обычных HTTP серверов, Go использует гоурутины при каждом обращении к функции Conn. За счет эго обеспечивается высокая производительность и параллельная обработка.
7
+
В отличии от обычных HTTP серверов, Go использует горутины при каждом обращении к функции Conn. За счет эго обеспечивается высокая производительность и параллельная обработка.
8
8
9
9
Go использует следующий код для ожидания новых подключений от клиента:
10
10
@@ -40,10 +40,10 @@ Go использует следующий код для ожидания нов
`Handler` - это интерфейс, однако, функция `sayhelloName` не реализует этот интерфейс. Почему, в таком случае, мы смогли использовать ее в качестве обработчика? Потому, что в пакете `http` существует другой тип `HandlerFunc`. В нашем нашем сервере из раздела 3.2 при вызове `HandlerFunc` происходит автоматическое приведение нашей функции `sayhelloName` к интерфейсу `Handler`. Это равносильно вызову `HandlerFunc(f)`, при этом `f` будет принудительно приведена к типу `HandlerFunc`.
43
+
`Handler` - это интерфейс, однако, функция `sayhelloName` не реализует этот интерфейс. Почему, в таком случае, мы смогли использовать ее в качестве обработчика? Потому, что в пакете `http` существует другой тип `HandlerFunc`. В нашем сервере из раздела 3.2 при вызове `HandlerFunc` происходит автоматическое приведение нашей функции `sayhelloName` к интерфейсу `Handler`. Это равносильно вызову `HandlerFunc(f)`, при этом `f` будет принудительно приведена к типу `HandlerFunc`.
44
44
45
45
type HandlerFunc func(ResponseWriter, *Request)
46
-
46
+
47
47
// ServeHTTP вызывает f(w, r).
48
48
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
49
49
f(w, r)
@@ -58,7 +58,7 @@ Go использует следующий код для ожидания нов
// Host-зависимый шаблон, имеет приоритет над универсальным
63
63
h := mux.match(r.Host + r.URL.Path)
64
64
if h == nil {
@@ -72,20 +72,20 @@ Go использует следующий код для ожидания нов
72
72
73
73
Маршрутизатор использует URL-адрес в качестве ключа для поиска соответствующего обработчика, который сохранен в карте и вызовов handler.ServeHTTP для выполнения функций обработки данных.
74
74
75
-
Теперь вы должны понимать принципы работы роутера. Фактически, Go поддерживает настраиваемые роутеры. Второй аргумент функции `ListenAndServe` необходим для конфигурации настраиваемого роутера с типом `Handler`. Таким образом любой роутер реализует интерфейс `Handler`.
75
+
Теперь вы должны понимать принципы работы роутера. Фактически, Go поддерживает настраиваемые роутеры. Второй аргумент функции `ListenAndServe` необходим для конфигурации настраиваемого роутера с типом `Handler`. Таким образом, любой роутер реализует интерфейс `Handler`.
76
76
77
77
Следующий пример покажет, как реализовать простой роутер.
78
78
79
79
package main
80
-
80
+
81
81
import (
82
82
"fmt"
83
83
"net/http"
84
84
)
85
-
85
+
86
86
type MyMux struct {
87
87
}
88
-
88
+
89
89
func (p *MyMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
90
90
if r.URL.Path == "/" {
91
91
sayhelloName(w, r)
@@ -94,11 +94,11 @@ Go использует следующий код для ожидания нов
94
94
http.NotFound(w, r)
95
95
return
96
96
}
97
-
97
+
98
98
func sayhelloName(w http.ResponseWriter, r *http.Request) {
0 commit comments