~/VibeHandbook

Языки

go.dev

Go

Что это

Go (Golang) — статически типизированный компилируемый язык от Google, разработанный ради простоты, быстрой сборки и параллелизма. Он создаёт единый статический бинарный файл, имеет небольшой и продуманный набор возможностей и предназначен для написания надёжных сетевых сервисов и инструментов командной строки.

Сильные стороны

  • Компилируется в единый бинарный файл без зависимостей — развёртывать тривиально.
  • Встроенный параллелизм через горутины и каналы.
  • Быстрая компиляция и быстрое выполнение, со сборкой мусора.
  • Мощная стандартная библиотека (HTTP, JSON, crypto) и принудительное форматирование (gofmt).

Компромиссы

  • Намеренно минималистичен: многословная обработка ошибок (if err != nil) и ограниченная выразительность.
  • Дженерики появились поздно и всё ещё скромны по сравнению с другими языками.
  • Хуже подходит для тяжёлой работы с данными или UI.
  • Простота, помогающая читаемости, на крупных кодовых базах может ощущаться как повторяемость.

Когда стоит выбрать

Выбирайте Go, когда вам нужен быстрый, самодостаточный бэкенд-сервис, CLI-инструмент или сетевая инфраструктура (прокси, API, демоны). Он блистает там, где важны простота развёртывания, предсказуемая производительность и параллелизм, — именно поэтому так много облачно-нативных инструментов (Docker, Kubernetes) написано на нём.

Подходит для вайб-кодинга

AI-ассистенты хорошо справляются с Go именно потому, что язык небольшой, а идиомы сильны — обычно есть один очевидный способ сделать что-либо, поэтому сгенерированный код как правило получается общепринятым и чистым с точки зрения gofmt. Направляйте AI обрабатывать ошибки явно, а не игнорировать их, использовать стандартную библиотеку прежде, чем тянуться к зависимостям, и применять горутины с корректной отменой через context для параллелизма. Просите его включать путь модуля в go.mod и запускаемую функцию main, чтобы вы могли сразу выполнить go run и проверить каждую часть.

package main

import (
	"fmt"
	"strings"
)

func main() {
	words := strings.Fields("go is fast and simple")
	counts := map[string]int{}
	for _, w := range words {
		counts[w]++
	}
	fmt.Println(counts)
}