Создание 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.