Найти в Дзене

Курс - «Программирование на Go для начинающих» - #17 Работа с сетью. HTTP-клиент и сервер в Go.

Оглавление

Создание HTTP-сервера в Go

Go предоставляет мощный и простой в использовании пакет net/http для создания HTTP-серверов. Вот базовый пример создания простого веб-сервера:

package main
import (
"fmt"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Привет, мир!")
}
func main() {
http.HandleFunc("/", helloHandler)
fmt.Println("Сервер запущен на http://localhost:8080")
http.ListenAndServe(":8080", nil)
}

В этом примере мы определяем функцию helloHandler, которая будет обрабатывать все HTTP-запросы к корню сайта (/). Затем мы используем функцию http.HandleFunc для связывания пути URL с обработчиком и запускаем сервер на порту 8080 с помощью функции http.ListenAndServe.

Создание HTTP-клиента в Go

Для создания HTTP-клиента в Go также используется пакет net/http. Пример выполнения GET-запроса:

package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
response, err := http.Get("http://example.com")
if err != nil {
fmt.Printf("Ошибка при запросе: %s\n", err)
return
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Printf("Ошибка при чтении ответа: %s\n", err)
return
}
fmt.Println(string(body))
}

В этом примере мы используем функцию http.Get для выполнения GET-запроса к указанному URL. После проверки на наличие ошибки мы читаем тело ответа с помощью ioutil.ReadAll и выводим его в консоль.

Работа с JSON

Часто при создании веб-приложений требуется обмен данными в формате JSON. Go предоставляет пакет encoding/json для удобной работы с JSON, включая сериализацию и десериализацию данных.

Сериализация (Маршалинг)

package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
person := Person{Name: "Михаил", Age: 34}
jsonData, err := json.Marshal(person)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(jsonData))
}

Десериализация (Анмаршалинг)

package main
import (
"encoding/json"
"fmt"
)
func main() {
jsonData := []byte(`{"name":"Михаил","age":34}`)
var person Person
err := json.Unmarshal(jsonData, &person)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%+v\n", person)
}

Эти основы помогут вам начать работу с HTTP-клиентом и сервером в Go, а также с обработкой данных в формате JSON.