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

Твой первый скрипт на Go — за 10 минут: минимальный CLI и сборка 🐹

Устали читать документацию на 500 страниц? Пишем рабочий CLI-инструмент на Go с нуля — от go mod init до готового бинарника. Без воды, с мемами и кросс-компиляцией.

К

Кодик

Автор

4 мин чтения

«Зачем тебе Go?» — спросили меня.
«Потому что мой Python-скрипт грузился дольше, чем я варил кофе», — ответил я.

Ладно, давайте честно. Вы наверняка уже слышали про Go раз пятьсот. Вам говорили, что он быстрый, что на нём написан Docker, Kubernetes и половина всего, что крутится в продакшене. Вы кивали, а потом открывали привычный VS Code с очередным JavaScript-проектом.

Шаг 0: Установка (если ещё не)

Заходим на go.dev/dl и качаем установщик. Или, если вы человек культуры:

# macOS
brew install go

# Ubuntu/Debian
sudo apt install golang-go

# Windows (через scoop)
scoop install go

Проверяем:

$ go version
go1.22.x (или свежее) — значит, всё ок 👍

Если увидели версию — поздравляю, вы уже дальше, чем 90% людей, которые «собирались попробовать Go».

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

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

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

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

Шаг 1: Создаём проект

mkdir my-first-go-cli
cd my-first-go-cli
go mod init my-first-go-cli

go mod init — это аналог npm init или pip init. Создаёт файл go.mod, который отслеживает зависимости. Да, в Go модульная система из коробки. Да, она работает. Да, я тоже был удивлён.

Шаг 2: Пишем код (самое интересное)

Создаём файл main.go:

package main

import (
    "fmt"
    "os"
    "strings"
    "time"
)

func main() {
    args := os.Args[1:]

    if len(args) == 0 {
        fmt.Println("🐹 Привет! Я твой первый Go-CLI!")
        fmt.Println()
        fmt.Println("Использование:")
        fmt.Println("  greet <имя>     — поздороваться")
        fmt.Println("  time            — текущее время")
        fmt.Println("  reverse <текст> — перевернуть строку")
        fmt.Println()
        fmt.Println("Пример: my-first-go-cli greet Алексей")
        return
    }

    command := strings.ToLower(args[0])

    switch command {
    case "greet":
        if len(args) < 2 {
            fmt.Println("❌ Укажи имя! Пример: greet Гофер")
            return
        }
        name := strings.Join(args[1:], " ")
        fmt.Printf("👋 Привет, %s! Добро пожаловать в мир Go!\n", name)

    case "time":
        now := time.Now()
        fmt.Printf("🕐 Сейчас: %s\n", now.Format("15:04:05 02.01.2006"))
        fmt.Printf("📅 День недели: %s\n", russianWeekday(now.Weekday()))

    case "reverse":
        if len(args) < 2 {
            fmt.Println("❌ Укажи текст! Пример: reverse Привет")
            return
        }
        text := strings.Join(args[1:], " ")
        fmt.Printf("🔄 Результат: %s\n", reverseString(text))

    default:
        fmt.Printf("🤷 Неизвестная команда: %s\n", command)
        fmt.Println("Запусти без аргументов, чтобы увидеть справку.")
    }
}

func reverseString(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

func russianWeekday(w time.Weekday) string {
    days := map[time.Weekday]string{
        time.Monday:    "Понедельник",
        time.Tuesday:   "Вторник",
        time.Wednesday: "Среда",
        time.Thursday:  "Четверг",
        time.Friday:    "Пятница",
        time.Saturday:  "Суббота",
        time.Sunday:    "Воскресенье",
    }
    return days[w]
}

Что тут происходит (без паники):

  • package main — точка входа. В Go всё начинается с main.

  • os.Args — аргументы командной строки. os.Args[0] — имя программы, [1:] — всё остальное.

  • switch — как switch в других языках, но без break. Да, Go не проваливается дальше автоматически. Спасибо, Go. 🙏

  • []rune — для корректного разворота строки с юникодом (а то кириллица разъедется).

Шаг 3: Запускаем

# Просто запустить
go run main.go

# С командами
go run main.go greet Гофер
go run main.go time
go run main.go reverse "Go — это кайф"

Оно работает. С первого раза. Без node_modules на 500 МБ. Без виртуального окружения. Просто работает.

Шаг 4: Собираем бинарник 🔨

А вот тут начинается магия Go:

go build -o mycli main.go

Всё. Один файл. Один бинарник. Никаких зависимостей. Его можно скинуть другу — и он запустит без установки Go, Python, Node.js или чего-либо ещё.

Кросс-компиляция (бонус для продвинутых)

Хотите собрать под Windows, сидя на Mac? Легко:

# Для WindowsGOOS=windows GOARCH=amd64 go build -o mycli.exe main.go

# Для LinuxGOOS=linux GOARCH=amd64 go build -o mycli-linux main.go

# Для macOS (Apple Silicon)GOOS=darwin GOARCH=arm64 go build -o mycli-mac main.go

Две переменные окружения — и у вас бинарник под любую платформу. Без Docker. Без CI/CD. Просто go build. Попробуйте провернуть такое на Python — я подожду. ☕

Куда двигаться дальше?

  • flag — встроенный пакет для парсинга флагов (--name, --verbose)

  • cobra — библиотека для серьёзных CLI-приложений (на ней написан kubectl)

  • Горутины и каналы — то самое, ради чего все любят Go

  • net/http — написать API-сервер на Go проще, чем заказать пиццу

📱 Хочешь прокачивать навыки каждый день?

Если тебе зашла тема и хочется учиться программированию с практикой — загляни в приложение Кодик. Там можно решать задачи, проходить интерактивные курсы и реально писать код, а не просто смотреть видосики (мы все знаем, чем это заканчивается 😅).

А ещё у нас есть Telegram-канал для разработчиков — там регулярно выходят полезные посты, разборы задач, шпаргалки и мемы (куда без них). Больше 2000 разработчиков уже в теме — отличный способ повторять материал и держать мозг в тонусе, пока едешь в метро или ждёшь деплой.

Кодик + Telegram-канал = комбо для тех, кто хочет расти как разработчик, а не просто собирать закладки «почитать потом». 🚀

Ну что, ваш чайник ещё не вскипел? Значит, мы уложились. Идите заварите чай и напишите свою первую горутину — заслужили. 🐹☕

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

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

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

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

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