Типы данных
Какие есть встроенные типы данных в golang?
В языке программирования Go (или Golang) предусмотрен ряд встроенных типов данных, которые можно разделить на несколько категорий: базовые типы, составные типы, специальные типы и интерфейсы. Вот основные встроенные типы данных в Go:
Базовые типы:
Boolean типы:
bool
— логический тип данных, принимающий значенияtrue
илиfalse
.
Целочисленные типы:
int
,int8
,int16
,int32
,int64
— целые числа с знаком различной битности.uint
,uint8
,uint16
,uint32
,uint64
,uintptr
— целые числа без знака различной битности.uintptr
— беззнаковый целочисленный тип, размер которого достаточен для хранения указателя.
Типы с плавающей точкой:
float32
,float64
— числа с плавающей точкой (вещественные числа) различной точности.
Комплексные числа:
complex64
,complex128
— комплексные числа с плавающей точкой, гдеcomplex64
использует дваfloat32
для представления вещественной и мнимой частей, аcomplex128
использует дваfloat64
.
Типы символов и строк:
byte
— синоним дляuint8
, представляет собой байт.rune
— синоним дляint32
, представляет Unicode кодовую точку.string
— строковый тип, представляющий собой последовательность байтов (обычно это текст в кодировке UTF-8).
Составные типы:
Массивы:
Пример:
var a [10]int
— массив из десяти целых чисел.
Срезы (slices):
Пример:
var s []int
— срез целых чисел.
Структуры (structs):
Пример:
struct { name string; age int }
— структура с полямиname
иage
.
Карты (maps):
Пример:
map[string]int
— карта с ключами типаstring
и значениями типаint
.
Каналы (channels):
Пример:
chan int
— канал для передачи целых чисел.
Специальные типы:
Интерфейсы (interfaces):
Пример:
interface{}
— пустой интерфейс, может содержать значение любого типа.
Функции:
Пример:
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 включают следующие аспекты:
Неизменяемость: Строки в Go являются неизменяемыми, что означает, что после их создания содержимое строки не может быть изменено. Любые операции, которые кажутся изменяющими строку, на самом деле создают новую строку.
UTF-8: Строки в Go по умолчанию кодируются с использованием UTF-8. Это международная стандартная кодировка, которая может представлять любой символ в мире и совместима с ASCII. Каждый символ может занимать от 1 до 4 байтов, в зависимости от символа.
Представление: В памяти строка представлена как последовательность байтов (не символов), что важно помнить при работе с многобайтовыми символами UTF-8. Строка в Go также хранит информацию о своей длине, что позволяет быстро получить длину строки без необходимости её перебора.
Индексация: При индексации строки
s[i]
возвращается байт, а не символ. Это означает, что если строка содержит многобайтовые символы UTF-8, прямая индексация может возвращать байты, которые не представляют полные символы. Для правильной работы с символами следует использовать пакетunicode/utf8
или перебирать строку с помощьюrange
, который корректно обрабатывает символы UTF-8.Операции со строками: 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