Files
build-web-application-with-…/ru/03.2.md
2021-06-21 22:01:42 +07:00

68 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 3.2 Создание простого веб-сервера
Ранее мы говорили о том, что Go предоставляет широкие возможности для работы с протоколом HTTP и создания веб-приложений, базирующихся на данном протоколе. Все эти возможности реализуются в пакете `net/http`.
## Использование пакета net/http для создания веб-сервера
package main
import (
"fmt"
"log"
"net/http"
"strings"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
r.ParseForm() // разбор аргументов, необходимо вызвать самостоятельно
fmt.Println(r.Form) // печать данных формы на стороне сервера
fmt.Println("path", r.URL.Path)
fmt.Println("scheme", r.URL.Scheme)
fmt.Println(r.Form["url_long"])
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
fmt.Fprintf(w, "Hello astaxie!") // отправка данных на клиент
}
func main() {
http.HandleFunc("/", sayhelloName) // устанавливаем обработчик
err := http.ListenAndServe(":9090", nil) // устанавливаем порт, который будем слушать
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
Когда мы исполним данный код, он запустит прослушивание порта 9090 на вашем компьютере.
Откройте браузер и введите URL `http://localhost:9090`. Вы увидите сообщение `Hello astaxie` на экране.
Давайте попробуем передать серверу несколько аргументов `http://localhost:9090/?url_long=111&url_long=222`
Посмотрите, что произошло на стороне сервера и клиента.
Вы должны увидеть следующие сообщения на стороне сервера
![](images/3.2.goweb.png?raw=true)
Рисунок 3.8 вывод информации на стороне сервера
Как вы видите, нам потребовалось вызвать всего две функции для того чтобы создать простой веб-сервер.
Если вы работаете с PHP, вы, вероятно, хотите спросить, нужно ли нам что-то вроде Nginx или Apache? Ответ - нет! Go реализует прослушку TCP порта самостоятельно, а функция `sayhelloName`, в нашем примере, очень похожа на контроллер из PHP.
Если вы работаете с Python, вы должны знать Tornado, и он очень похож на приведенный выше пример.
Если вы работаете с Ruby, вы наверняка заметили, что это как сценарий/сервер в RoR.
В данном разделе мы использовали две простые функции для создания простого веб-сервера, который уже готов к параллельным вычислениям. В следующих двух разделах мы будем говорить о том, как использовать эту особенность.
## Ссылки
- [Содержание](preface.md)
- Предыдущий раздел: [Принципы работы Веб](03.1.md)
- Следующий раздел: [Как Go работает с веб](03.3.md)