Справочник языка Go

Краткий справочник по синтаксису Go, типам и языковым конструкциям.

Базовый синтаксис

Объявление пакета

package main

Каждый файл Go начинается с объявления пакета. 'main' особенный - он определяет исполняемую программу.

Оператор импорта

import "fmt"

Импортирует внешние пакеты. Используйте скобки для множественного импорта.

Объявление функции

func functionName(param type) returnType { }

Определяет функцию с параметрами и типом возвращаемого значения.

Объявление переменной

var name type = value

Объявляет переменную с явным типом. Можно опустить тип для автоматического вывода типа.

Краткое объявление

name := value

Краткое объявление переменной с выводом типа. Работает только внутри функций.

Типы данных

Базовые типы

bool, string, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, byte, rune, float32, float64, complex64, complex128

Встроенные базовые типы данных Go.

Массивы

[5]int{1, 2, 3, 4, 5}

Массивы фиксированного размера. Размер является частью типа.

Срезы

[]int{1, 2, 3}

Динамические массивы. Используются чаще обычных массивов.

Карты

map[string]int{"key": 42}

Хеш-таблицы/словари. Пары ключ-значение.

Структуры

type Person struct { Name string; Age int }

Пользовательские типы, группирующие связанные данные.

Указатели

*int, &variable

Ссылки на адреса памяти. Используйте & для получения адреса, * для разыменования.

Управление потоком

Условный оператор if

if condition { } else if condition { } else { }

Условное выполнение. Скобки вокруг условия не требуются.

Оператор switch

switch value { case 1: ...; case 2: ...; default: ... }

Многовариантное ветвление. По умолчанию нет провала между case.

Цикл for

for i := 0; i < 10; i++ { }

Единственная циклическая конструкция в Go. Может использоваться как while.

Цикл range

for index, value := range slice { }

Итерация по массивам, срезам, картам или каналам.

Defer

defer function()

Откладывает выполнение функции до возврата из окружающей функции.

Функции

Базовая функция

func add(a, b int) int { return a + b }

Функция с параметрами и возвращаемым значением.

Множественные возвращаемые значения

func divide(a, b int) (int, error) { }

Функции могут возвращать несколько значений. Обычно значение + ошибка.

Именованные возвращаемые значения

func divide(a, b int) (result int, err error) { }

Возвращаемые значения могут быть именованными и использоваться как переменные.

Вариативная функция

func sum(nums ...int) int { }

Функция, принимающая переменное количество аргументов.

Анонимная функция

func(x int) int { return x * 2 }

Функция без имени. Может быть присвоена переменной.

Методы и интерфейсы

Объявление метода

func (r receiver) methodName() returnType { }

Прикрепление методов к типам с помощью приёмников.

Приёмник-указатель

func (r *Type) methodName() { }

Используйте приёмник-указатель для изменения приёмника или для больших структур.

Объявление интерфейса

type Stringer interface { String() string }

Интерфейсы определяют наборы методов. Реализуются неявно.

Пустой интерфейс

interface{}

Может содержать значения любого типа. Аналогично Object в других языках.

Параллелизм

Горутина

go functionCall()

Запуск новой горутины (лёгкого потока).

Создание канала

ch := make(chan int)

Создание канала для коммуникации между горутинами.

Буферизованный канал

ch := make(chan int, 10)

Канал с буферной ёмкостью.

Операции с каналами

ch <- value; value := <-ch

Отправка в канал и получение из канала.

Оператор select

select { case <-ch1: ...; case ch2 <- value: ...; default: ... }

Ожидание множественных операций с каналами.

Закрытие канала

close(ch)

Закрытие канала для сигнализации о том, что больше значений не будет отправлено.

Обработка ошибок

Интерфейс error

type error interface { Error() string }

Встроенный интерфейс для представления ошибочных состояний.

Создание ошибок

errors.New("сообщение об ошибке")

Создание простых значений ошибок.

Проверка ошибок

if err != nil { }

Идиоматичный способ проверки ошибок в Go.

Пользовательская ошибка

type MyError struct { ... }; func (e MyError) Error() string { }

Создание пользовательских типов ошибок путём реализации метода Error().

📚 Дополнительные ресурсы

Изучите больше ресурсов Go для углубления понимания.