«Зачем тебе 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».
Шаг 1: Создаём проект
mkdir my-first-go-cli
cd my-first-go-cli
go mod init my-first-go-cligo 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-канал = комбо для тех, кто хочет расти как разработчик, а не просто собирать закладки «почитать потом». 🚀
Ну что, ваш чайник ещё не вскипел? Значит, мы уложились. Идите заварите чай и напишите свою первую горутину — заслужили. 🐹☕
