← Назад к вопросам

Что писал на Golang

2.0 Middle🔥 91 комментариев
#Скриптинг и программирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Отличный вопрос! Как DevOps Engineer, я использовал Golang для создания инструментов, которые автоматизируют и улучшают процессы разработки, deployment и мониторинг. Это не разработка бизнес-логики приложений, а создание инфраструктурного кода — утилит, сервисов и интеграций, которые делают работу всей системы более надежной и эффективной.

Мои основные направления работы с Go были следующие:

1. Автоматизация и инструменты для CI/CD и инфраструктуры

Go идеально подходит для написания надежных, быстрых и легко распространяемых утилит.

CLI-инструменты для внутренних процессов

  • Автоматизация рутинных задач: Инструменты для массового обновления конфигураций, проверки состояния кластеров, сборки отчетов.
  • Интеграция с внешними системами: Клиенты для API различных сервисов (Jira, GitLab, систем мониторинга), которые затем использовались в скриптах или других инструментах.
// Пример простого CLI-инструмента для проверки статуса сервисов
package main

import (
    "fmt"
    "net/http"
    "time"
)

func checkService(url string) bool {
    client := &http.Client{Timeout: 5 * time.Second}
    resp, err := client.Get(url)
    if err != nil {
        return false
    }
    defer resp.Body.Close()
    return resp.StatusCode == http.StatusOK
}

func main() {
    services := []string{
        "https://api.service-1.prod",
        "https://api.service-2.prod",
    }

    for _, svc := range services {
        if checkService(svc) {
            fmt.Printf("[OK] %s\n", svc)
        } else {
            fmt.Printf("[FAIL] %s\n", svc)
        }
    }
}

Плагины и расширения для существующих систем

  • Плагины для Terraform: Разработка custom providers для управления внутренними ресурсами компании, которые не покрывались стандартными провайдерами.
  • Расширения для систем мониторинга: Написание экспортеров (exporters) для Prometheus для специфичных метрик приложений или оборудования.
// Пример фрагмента Prometheus exporter для кастомной метрики
package main

import (
    "net/http"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    customQueueSize = prometheus.NewGauge(
        prometheus.GaugeOpts{
            Name: "internal_message_queue_size",
            Help: "Current size of the internal processing queue.",
        })
)

func main() {
    prometheus.MustRegister(customQueueSize)

    // Здесь логика обновления метрики (например, из внутреннего API)
    go updateMetrics()

    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":8080", nil)
}

func updateMetrics() {
    // Периодически получаем значение и устанавливаем его
    // customQueueSize.Set(getCurrentQueueSize())
}

2. Микросервисы и служебные сервисы

Небольшие, но критически важные сервисы, часто работающие "в фоне".

  • Сервисы для обработки событий: Сервисы, которые слушают события из Kafka или RabbitMQ, фильтруют их, трансформируют и отправляют в другие системы (например, в SIEM или для аналитики).
  • API-гейты и прокси: Легковесные прокси для агрегации запросов к нескольким backend-сервисам или для добавления общих заголовков/аутентификации.
  • Сервисы конфигурации: Динамическая подача конфигурации (например, как Consul или Etcd, но для специфичных нужд) другим сервисам в кластере.

3. Работа с контейнерами и оркестрацией

  • Инструменты вокруг Docker/Kubernetes: Например, автоматические "чистильщики" старых образов из registry, валидаторы манифестов Kubernetes, контроллеры для кастомных ресурсов (Custom Resource Definitions, CRDs) в кластере K8s. Go — родной язык для экосистемы Kubernetes, поэтому интеграция здесь наиболее естественна.

4. Утилиты для диагностики и мониторинга

  • Агенты для сборки логов и метрик: Агенты, которые устанавливаются на серверах и собирают данные нестандартного формата, преобразуя их в удобный для ELK Stack или Prometheus вид.
  • Инструменты для сетевой диагностики: Утилиты для проверки доступности, латентности между компонентами в сложной распределенной системе.

Почему именно Go, а не Python или Bash?

  • Производительность и низкое потребление ресурсов: Утилиты на Go работают быстро и не становятся нагрузкой на систему.
  • Статическая компиляция и простота распространения: Готовый бинарный файл — это огромное преимущество. Не нужно заботиться о наличии интерпретатора или версии языка на целевой системе (docker run, bare metal server).
  • Отличная поддержка сетевых операций и параллельности: Принцип "горутины (goroutines)" и каналы (channels) идеально подходят для написания высокопроизводительных сетевых сервисов и агентов.
  • Надежность и строгая типизация: Это уменьшает количество ошибок в runtime для инфраструктурного кода, который должен быть максимально стабильным.
  • Родная интеграция с современной инфраструктурой: Огромное количество инструментов в мире Cloud-Native (Docker, Kubernetes, Terraform, Prometheus, Grafana) написаны на Go или имеют первоклассные Go-клиенты.

В итоге: Как DevOps, я писал на Go именно там, где требовалась высокая надежность, производительность и простой дистрибутив — создавая "арматуру" и "инструменты" для основной платформы, а не её "бизнес-сердце". Это позволяет строить более устойчивые и автоматизированные процессы.

Что писал на Golang | PrepBro