Типы данных

Что такое type switch?

Type switch в Go - это способ проверить, какого типа является значение, хранящееся в интерфейсе. Это похоже на обычный switch, но вместо значений в кейсах указываются типы.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"

func do(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("Twice %v is %v\n", v, v*2)
case string:
fmt.Printf("%q is %v bytes long\n", v, len(v))
default:
fmt.Printf("I don't know about type %T!\n", v)
}
}

func main() {
do(21)
do("hello")
do(true)
}

Какие типы данных есть в Golang?

  1. Целочисленные типыint8int16int32int64uint8uint16uint32uint64byte (синоним для uint8), rune (синоним для int32), int и uint.
  2. Числа с плавающей точкойfloat32 и float64.
  3. Строкиstring.
  4. Булев типbool.
  5. Составные типы: Массивы, срезы, структуры, ассоциативные массивы

Какой длины руна?

rune - это алиас для int32. Это означает, что rune занимает 4 байта или 32 бита. Каждая rune представляет собой один Юникод символ. Например, строка может быть преобразована в срез rune ([]rune), и каждый элемент этого среза будет представлять собой один Юникод символ.

Как реализовать Enum в Golang?

В Go нет встроенной поддержки перечислений (enum), но их можно эмулировать с помощью констант. Вот пример реализации enum в Go:

title
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import "fmt"

type Season int

const (
Summer Season = iota
Autumn
Winter
Spring
)

func (s Season) String() string {
return [...]string{"Лето", "Осень", "Зима", "Весна"}[s]
}

func main() {
s := Winter
fmt.Println(s)
}

Что если во время компиляции переполним тип? В int8 запишем 256?

Если вы попытаетесь записать значение, превышающее максимально допустимое для данного типа, в Go, то произойдет переполнение типа.

Например, int8 может хранить значения от -128 до 127. Если вы попытаетесь записать 256 в переменную типа int8, то произойдет переполнение. В результате, вместо 256 будет записано значение, которое соответствует остатку от деления 256 на 256 (количество возможных значений для int8), то есть 01.

Важно отметить, что такое поведение может привести к неожиданным результатам, поэтому всегда следует убедиться, что значения, которые вы записываете в переменные, не превышают максимально допустимые для их типа

Что происходит при переполнении числа, например в uint8 выйдем за границу на 1?

Если вы попытаетесь записать значение, превышающее максимально допустимое для данного типа, в Go, то произойдет переполнение типа.

Например, uint8 может хранить значения от 0 до 255. Если вы попытаетесь записать 256 в переменную типа uint8, то произойдет переполнение. В результате, вместо 256 будет записано значение, которое соответствует остатку от деления 256 на 256 (количество возможных значений для uint8), то есть 0.

Важно отметить, что такое поведение может привести к неожиданным результатам, поэтому всегда следует убедиться, что значения, которые вы записываете в переменные, не превышают максимально допустимые для их типа.

Вот вам и types

Поделиться