5.10. Встроенные функции в Go
Встроенные функции в Go
Go предоставляет ограниченный набор встроенных функций, которые доступны без импорта пакетов. Эти функции являются частью языка и работают на уровне компилятора.
Встроенные функции
| Функция | Значение | Пример |
|---|---|---|
append | Добавляет элементы в срез и возвращает новый срез | slice = append(slice, 42) |
cap | Возвращает вместимость среза, массива, канала или строки | c := cap(slice) |
close | Закрывает канал, сигнализируя об окончании передачи данных | close(ch) |
complex | Создаёт комплексное число из действительной и мнимой частей | z := complex(3.0, 4.0) |
copy | Копирует элементы из одного среза в другой, возвращает количество скопированных элементов | n := copy(dst, src) |
delete | Удаляет элемент из карты по указанному ключу | delete(m, key) |
imag | Возвращает мнимую часть комплексного числа | im := imag(z) |
len | Возвращает длину среза, массива, строки, карты или канала | l := len(slice) |
make | Создаёт срез, карту или канал с заданной начальной ёмкостью | m := make(map[string]int) |
new | Выделяет память для типа и возвращает указатель на нулевое значение | p := new(int) |
panic | Вызывает панику, немедленно останавливая нормальное выполнение | panic("critical error") |
print | Выводит аргументы в стандартный вывод без форматирования | print("debug") |
println | Выводит аргументы в стандартный вывод с завершающим переводом строки | println(x, y) |
real | Возвращает действительную часть комплексного числа | re := real(z) |
recover | Восстанавливает выполнение после паники внутри отложенной функции | if r := recover(); r != nil { /* обработка */ } |
Ключевые слова языка
| Ключевое слово | Значение | Пример |
|---|---|---|
break | Прерывает выполнение цикла или оператора switch | for { if cond { break } } |
case | Определяет ветку в операторах switch или select | switch x { case 1: /* ... */ } |
chan | Объявляет тип канала для горутинной коммуникации | ch := make(chan int) |
const | Объявляет константу с неизменяемым значением | const pi = 3.14159 |
continue | Пропускает текущую итерацию цикла | for i := 0; i < 10; i++ { if i%2 == 0 { continue } } |
default | Определяет ветку по умолчанию в switch или select | select { case v := <-ch: /* ... */; default: /* ... */ } |
defer | Откладывает выполнение функции до выхода из текущей функции | defer file.Close() |
else | Определяет альтернативную ветку в условном операторе | if x > 0 { /* ... */ } else { /* ... */ } |
fallthrough | Передаёт управление следующей ветке в switch | switch x { case 1: fallthrough; case 2: /* ... */ } |
for | Объявляет цикл или диапазонную итерацию | for i := 0; i < n; i++ { /* ... */ } |
func | Объявляет функцию или метод | func add(a, b int) int { return a + b } |
go | Запускает функцию как горутину | go process(data) |
goto | Переходит к метке в текущей функции | goto label; /* ... */ label: |
if | Объявляет условный оператор | if x > 0 { /* ... */ } |
import | Импортирует пакет в текущий файл | import "fmt" |
interface | Объявляет интерфейсный тип | type Reader interface { Read(p []byte) (n int, err error) } |
map | Объявляет тип карты (ассоциативного массива) | m := map[string]int{"a": 1} |
package | Объявляет имя пакета в файле | package main |
range | Итерирует по элементам массива, среза, строки, карты или канала | for k, v := range m { /* ... */ } |
return | Возвращает значение из функции и завершает её выполнение | return result |
select | Выбирает один из нескольких операций с каналами | select { case v := <-ch: /* ... */; case ch <- x: /* ... */ } |
struct | Объявляет составной тип с именованными полями | type Point struct { X, Y int } |
switch | Выбирает одну из нескольких веток выполнения | switch x { case 1: /* ... */; case 2: /* ... */ } |
type | Объявляет новый тип на основе существующего | type Celsius float64 |
var | Объявляет переменную | var x int = 42 |
Встроенные типы
| Тип | Значение | Пример |
|---|---|---|
bool | Логический тип со значениями true и false | var active bool = true |
string | Неизменяемая последовательность байтов в кодировке UTF-8 | s := "hello" |
int | Целое число, размер зависит от платформы (32 или 64 бита) | var count int = 100 |
int8 | Целое число со знаком размером 8 бит | var small int8 = -128 |
int16 | Целое число со знаком размером 16 бит | var medium int16 = 32767 |
int32 | Целое число со знаком размером 32 бита | var large int32 = 2147483647 |
int64 | Целое число со знаком размером 64 бита | var huge int64 = 9223372036854775807 |
uint | Целое число без знака, размер зависит от платформы | var index uint = 42 |
uint8 | Целое число без знака размером 8 бит | var byteValue uint8 = 255 |
uint16 | Целое число без знака размером 16 бит | var word uint16 = 65535 |
uint32 | Целое число без знака размером 32 бита | var dword uint32 = 4294967295 |
uint64 | Целое число без знака размером 64 бита | var qword uint64 = 18446744073709551615 |
uintptr | Целое число без знака для хранения адреса памяти | var addr uintptr = 0x7fff5fbff8f8 |
byte | Псевдоним для uint8, используется для байтовых данных | var b byte = 'A' |
rune | Псевдоним для int32, представляет кодовую точку Unicode | var r rune = 'я' |
float32 | Число с плавающей точкой одинарной точности | var f32 float32 = 3.14 |
float64 | Число с плавающей точкой двойной точности | var f64 float64 = 3.1415926535 |
complex64 | Комплексное число с компонентами float32 | var c64 complex64 = 1 + 2i |
complex128 | Комплексное число с компонентами float64 | var c128 complex128 = 1.0 + 2.0i |
Примечание: функции array(), empty(), exit() и die() не существуют во встроенном пространстве имён языка Go. Для завершения программы используется функция os.Exit() из стандартной библиотеки. Проверка на пустоту контейнеров выполняется через сравнение длины с нулём: len(slice) == 0.