Типы данных

Какие есть встроенные типы данных в golang?

В языке программирования Go (или Golang) предусмотрен ряд встроенных типов данных, которые можно разделить на несколько категорий: базовые типы, составные типы, специальные типы и интерфейсы. Вот основные встроенные типы данных в Go:

Базовые типы:

  1. Boolean типы:

    • bool — логический тип данных, принимающий значения true или false.

  2. Целочисленные типы:

    • int, int8, int16, int32, int64 — целые числа с знаком различной битности.

    • uint, uint8, uint16, uint32, uint64, uintptr — целые числа без знака различной битности. uintptr — беззнаковый целочисленный тип, размер которого достаточен для хранения указателя.

  3. Типы с плавающей точкой:

    • float32, float64 — числа с плавающей точкой (вещественные числа) различной точности.

  4. Комплексные числа:

    • complex64, complex128 — комплексные числа с плавающей точкой, где complex64 использует два float32 для представления вещественной и мнимой частей, а complex128 использует два float64.

  5. Типы символов и строк:

    • byte — синоним для uint8, представляет собой байт.

    • rune — синоним для int32, представляет Unicode кодовую точку.

    • string — строковый тип, представляющий собой последовательность байтов (обычно это текст в кодировке UTF-8).

Составные типы:

  1. Массивы:

    • Пример: var a [10]int — массив из десяти целых чисел.

  2. Срезы (slices):

    • Пример: var s []int — срез целых чисел.

  3. Структуры (structs):

    • Пример: struct { name string; age int } — структура с полями name и age.

  4. Карты (maps):

    • Пример: map[string]int — карта с ключами типа string и значениями типа int.

  5. Каналы (channels):

    • Пример: chan int — канал для передачи целых чисел.

Специальные типы:

  1. Интерфейсы (interfaces):

    • Пример: interface{} — пустой интерфейс, может содержать значение любого типа.

  2. Функции:

    • Пример: func(int) float64 — функция, принимающая int и возвращающая float64.

Использование типов данных:

В Go типы данных строго определены, и компилятор проверяет соответствие типов во время компиляции. Это помогает предотвратить многие ошибки, связанные с типами данных, и делает код более безопасным и предсказуемым.

Алиасом чего является byte и rune в golang?

В языке программирования Go, типы данных byte и rune являются алиасами для других типов данных:

  • byte является алиасом для типа uint8. Он представляет собой 8-битное целое число без знака, используемое для представления ASCII символов и других 8-битных данных[5].

  • rune является алиасом для типа int32. Этот тип данных используется для представления символов Юникода (Unicode characters) в кодировке UTF-32 aka UCS-4. Rune представляет собой 32-битное целое число со знаком и используется для работы с не-ASCII символами в строках[1][5].

Таким образом, в Go тип данных byte используется для работы с 8-битными данными, включая ASCII символы, в то время как тип данных rune используется для работы с символами Юникода в кодировке UTF-32[1][5].

Citations: [1] https://ru.stackoverflow.com/questions/1567519/rune-%D0%B8-byte-%D0%B2-%D1%87%D1%91%D0%BC-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0 [2] https://ru.hexlet.io/courses/go-basics/lessons/string-runes/theory_unit [3] https://code-basics.com/ru/languages/go/lessons/strings-runes [4] https://vc.ru/u/1389654-machine-learning/695828-golang-stroki-i-runy [5] https://www.bogotobogo.com/GoLang/GoLang_byte_and_rune.php

Как строки представлены в golang?

В языке программирования Go строки представлены как неизменяемые последовательности байтов. Основные характеристики строк в Go включают следующие аспекты:

  1. Неизменяемость: Строки в Go являются неизменяемыми, что означает, что после их создания содержимое строки не может быть изменено. Любые операции, которые кажутся изменяющими строку, на самом деле создают новую строку.

  2. UTF-8: Строки в Go по умолчанию кодируются с использованием UTF-8. Это международная стандартная кодировка, которая может представлять любой символ в мире и совместима с ASCII. Каждый символ может занимать от 1 до 4 байтов, в зависимости от символа.

  3. Представление: В памяти строка представлена как последовательность байтов (не символов), что важно помнить при работе с многобайтовыми символами UTF-8. Строка в Go также хранит информацию о своей длине, что позволяет быстро получить длину строки без необходимости её перебора.

  4. Индексация: При индексации строки s[i] возвращается байт, а не символ. Это означает, что если строка содержит многобайтовые символы UTF-8, прямая индексация может возвращать байты, которые не представляют полные символы. Для правильной работы с символами следует использовать пакет unicode/utf8 или перебирать строку с помощью range, который корректно обрабатывает символы UTF-8.

  5. Операции со строками: Go предоставляет ряд встроенных операций для работы со строками, таких как конкатенация (+), получение подстроки (срезы), а также стандартные функции в пакете strings для поиска, замены, разделения строк и т.д.

Пример работы со строками в Go:

package main

import (
    "fmt"
)

func main() {
    s := "Hello, 世界"
    fmt.Println(len(s)) // Выведет количество байт в строке, а не количество символов

    for i, r := range s {
        fmt.Printf("%d: %q\n", i, r) // Корректно обрабатывает символы UTF-8
    }
}

В этом примере строка s содержит как ASCII символы, так и символы, закодированные в UTF-8, которые занимают более одного байта. Использование range позволяет корректно итерировать по символам, а не по байтам.

Last updated