{}const=>[]async()letfn</>var
РазработкаBackendПрактика

Пишем первый API на Go за вечер: сервер, JSON и немного магии

Разберём, как за один вечер поднять свой первый API на Go: от запуска сервера до обработки запросов и возврата JSON. Без лишней теории — только то, что реально нужно, чтобы увидеть результат.

К

Кодик

Автор

4 мин чтения

🤯 Почему Go идеально подходит для первого API?

Go — это язык, который будто создан для бекенда. Он быстрый, простой и не заставляет тебя устанавливать половину интернета ради одного сервера.

В других языках ты иногда только настраиваешь окружение дольше, чем живёт мотивация. А в Go всё проще: написал несколько строк, запустил — и у тебя уже работает сервер.

⚡ встроенный HTTP-сервер

🧱 понятная структура кода

🚀 быстрая компиляция

🧠 минимум магии, максимум контроля

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

🧩 Что мы сделаем?

Сегодня соберём маленький API, который умеет:

  • принимать HTTP-запросы;

  • отвечать обычным текстом;

  • возвращать JSON;

  • читать параметры из URL.

То есть не просто “Hello World”, а уже что-то похожее на настоящий маленький бекенд.

🛠 Шаг 1. Создаём файл main.go

Создай папку проекта и файл main.go. Внутрь вставь вот такой код:

package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "Hello, API 👋")
}

func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}

Запускаем:

go run main.go

Теперь открой в браузере:

http://localhost:8080

Если видишь Hello, API 👋 — поздравляю, сервер жив. Он дышит. Он принимает запросы. Он уже почти взрослый.

🧠 Что происходит в коде

Давай без занудства.

  • net/http — встроенный пакет Go для работы с HTTP;

  • handler — функция, которая отвечает на запрос;

  • w — объект, через который мы отправляем ответ;

  • r — объект с информацией о запросе;

  • http.ListenAndServe(":8080", nil) — запуск сервера на порту 8080.

По сути, мы сказали Go: “Слушай порт 8080 и отвечай всем, кто придёт”.

🔥 Шаг 2. Возвращаем JSON как нормальный API

Текст — это мило, но настоящий API обычно возвращает JSON. Поэтому прокачаем код.

package main

import (
	"encoding/json"
	"net/http"
)

type Response struct {
	Message string `json:"message"`
	Status  string `json:"status"`
}

func handler(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")

	response := Response{
		Message: "API работает 🚀",
		Status:  "ok",
	}

	json.NewEncoder(w).Encode(response)
}

func main() {
	http.HandleFunc("/api", handler)
	http.ListenAndServe(":8080", nil)
}

Теперь открой:

http://localhost:8080/api

Ответ будет таким:

{
  "message": "API работает 🚀",
  "status": "ok"
}

Всё. Это уже настоящий API. Не “ну типа сервер”, а нормальная ручка, которая возвращает JSON.

⚙️ Шаг 3. Добавляем параметр в запрос

Сейчас API всегда отвечает одинаково. Но обычно сервер должен реагировать на данные от пользователя. Например, передадим имя:

http://localhost:8080/api?name=Alex

Обновим обработчик:

func handler(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")

	name := r.URL.Query().Get("name")

	if name == "" {
		name = "гость"
	}

	response := map[string]string{
		"message": "Привет, " + name,
	}

	json.NewEncoder(w).Encode(response)
}

Теперь если открыть /api?name=Alex, сервер вернёт персональный ответ. Маленькая деталь, но ощущение уже такое, будто ты пишешь микросервис для стартапа с оценкой в миллиард.

🧱 Шаг 4. Добавляем несколько маршрутов

Один маршрут — хорошо. Несколько — уже похоже на приложение.

package main

import (
	"encoding/json"
	"net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")

	json.NewEncoder(w).Encode(map[string]string{
		"message": "Hello from Go 👋",
	})
}

func userHandler(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")

	json.NewEncoder(w).Encode(map[string]string{
		"name": "Alex",
		"role": "developer",
	})
}

func main() {
	http.HandleFunc("/hello", helloHandler)
	http.HandleFunc("/user", userHandler)

	http.ListenAndServe(":8080", nil)
}

Теперь у нас есть два адреса:

  • /hello — приветствие;

  • /user — данные пользователя.

И вот тут начинается кайф: ты уже можешь добавлять новые маршруты, новые данные и постепенно собирать полноценный API.

💣 Частые ошибки новичков

❌ Забыть Content-Type

Если возвращаешь JSON, лучше явно указать:

w.Header().Set("Content-Type", "application/json")

❌ Сразу тащить фреймворк

Для первого API не нужен большой фреймворк. Сначала пойми базу: запрос, обработчик, ответ, JSON.

❌ Не проверять ошибки

В учебном примере можно жить проще, но в реальном проекте ошибки игнорировать нельзя. Go этого не любит. И жизнь тоже.

❌ Писать всё в одном файле навсегда

Для старта main.go — нормально. Но когда проект растёт, код лучше разделять: маршруты отдельно, логика отдельно, модели отдельно.

📱 Где тренироваться дальше

Читать статьи полезно, но программирование реально прокачивается только через практику. Можно посмотреть 20 гайдов по Go, но пока сам не напишешь сервер — мозг будет делать вид: “да-да, я всё понял”, хотя на самом деле просто красиво покивал.

В приложении Кодик можно учиться программированию через практические задания: короткие уроки, понятные объяснения и тренировка прямо на задачах.

А ещё у Кодика есть телеграм-сообщество, где выходят полезные посты, разборы и советы. Это удобный способ повторять программирование не только “когда сел учиться”, но и между делом.

🚀 Что делать дальше?

После первого API можно двигаться дальше:

  • подключить базу данных;

  • сделать CRUD;

  • добавить авторизацию;

  • разделить проект на папки;

  • попробовать роутер вроде chi или gorilla/mux.

Но главное — не пытаться сразу построить “идеальную архитектуру”. Сначала сделай так, чтобы работало. Потом сделай красиво. Потом снова сломай. Потом пойми, почему. Вот это и есть разработка.

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты