# 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)