diff --git "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/array-slice.md" b/content/3.golang/1.array-slice.md similarity index 99% rename from "content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/array-slice.md" rename to content/3.golang/1.array-slice.md index c730a7e..0bfbfc0 100644 --- "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/array-slice.md" +++ b/content/3.golang/1.array-slice.md @@ -1,7 +1,5 @@ --- title: Массивы и слайсы -sidebar_position: 2 -description: Вопросы по массивам и слайсам. --- ## Что такое слайс? diff --git "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/strings.md" b/content/3.golang/2.strings.md similarity index 98% rename from "content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/strings.md" rename to content/3.golang/2.strings.md index 3e229d4..0b91e2a 100644 --- "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/strings.md" +++ b/content/3.golang/2.strings.md @@ -1,7 +1,5 @@ --- title: Строки -sidebar_position: 3 -description: Вопросы по строкам в Golang. --- ## Что такое string или строки? diff --git "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/hashmap.md" b/content/3.golang/3.hashmap.md similarity index 99% rename from "content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/hashmap.md" rename to content/3.golang/3.hashmap.md index edddf37..b08092f 100644 --- "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/hashmap.md" +++ b/content/3.golang/3.hashmap.md @@ -1,7 +1,5 @@ --- title: Хеш-мапы -sidebar_position: 1 -description: Вопросы по хеш-мапам в Golang --- ## Что такое мапа? diff --git "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/interface.md" b/content/3.golang/4.interface.md similarity index 98% rename from "content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/interface.md" rename to content/3.golang/4.interface.md index dbd533a..f81d889 100644 --- "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/interface.md" +++ b/content/3.golang/4.interface.md @@ -1,7 +1,5 @@ --- title: Интерфейсы -sidebar_position: 5 -description: Вопросы по интерфейсам в Golang --- ## Что такое интерфейс? diff --git "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/links.md" b/content/3.golang/5.links.md similarity index 99% rename from "content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/links.md" rename to content/3.golang/5.links.md index 96f4d31..fdc536d 100644 --- "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/links.md" +++ b/content/3.golang/5.links.md @@ -1,7 +1,5 @@ --- title: Указатели -sidebar_position: 17 -description: Вопросы по указателям --- ## Что такое указатель? @@ -150,4 +148,4 @@ func main() { **Избегайте использования указателей, когда:** 1. **Вы работаете с небольшими структурами данных или простыми типами.** Для небольших структур данных или простых типов, таких как `int` или `bool`, передача по значению обычно быстрее и безопаснее. 2. **Вы не хотите, чтобы функция изменяла исходную переменную.** Если вы передаете переменную по значению, функция не сможет изменить исходную переменную, что может быть полезно для предотвращения неожиданных побочных эффектов. -3. **Вы хотите избежать ошибок во время выполнения, связанных с `nil`.** Если вы используете указатель, вам нужно быть уверенным, что он не `nil`, прежде чем обращаться к его значению, иначе вы получите панику во время выполнения. \ No newline at end of file +3. **Вы хотите избежать ошибок во время выполнения, связанных с `nil`.** Если вы используете указатель, вам нужно быть уверенным, что он не `nil`, прежде чем обращаться к его значению, иначе вы получите панику во время выполнения. diff --git "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/goroutines.md" b/content/3.golang/6.goroutines.md similarity index 98% rename from "content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/goroutines.md" rename to content/3.golang/6.goroutines.md index 8494e5e..cc59eeb 100644 --- "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/goroutines.md" +++ b/content/3.golang/6.goroutines.md @@ -1,7 +1,5 @@ --- title: Горутины -sidebar_position: 12 -description: Вопросы по горутинам. --- ## Что такое горутина? @@ -162,4 +160,4 @@ func worker(result chan string) { - Неправильное использование каналов, например, отправка или получение из закрытого или неполного канала, или блокировка канала без возможности выхода. - Неэффективное управление контекстами, например, отсутствие отмены или таймаута для контекстов, передаваемых в горутины. - Неожиданные ошибки или паники, которые прерывают работу горутины, не освобождая ресурсы. -- Неоптимальный дизайн программы, например, создание избыточного количества горутин или недостаточный контроль над их жизненным циклом. \ No newline at end of file +- Неоптимальный дизайн программы, например, создание избыточного количества горутин или недостаточный контроль над их жизненным циклом. diff --git "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/context.md" b/content/3.golang/7.context.md similarity index 99% rename from "content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/context.md" rename to content/3.golang/7.context.md index b8c9a0a..e2cf1d0 100644 --- "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/context.md" +++ b/content/3.golang/7.context.md @@ -1,7 +1,5 @@ --- title: Контекст -sidebar_position: 16 -description: Вопросы по контексту --- ## Что такое контекст? @@ -79,4 +77,4 @@ defer cancel() // Make sure to cancel when done with context 3. **Проблемы с производительностью**: Создание нового контекста для каждого запроса с логгером может привести к увеличению накладных расходов и использованию памяти. -В конечном итоге, решение о том, передавать ли логгер через контекст, зависит от конкретных требований вашего приложения и вашего стиля программирования. \ No newline at end of file +В конечном итоге, решение о том, передавать ли логгер через контекст, зависит от конкретных требований вашего приложения и вашего стиля программирования. diff --git a/content/3.golang/_category_.json b/content/3.golang/_category_.json deleted file mode 100644 index d21d6ed..0000000 --- a/content/3.golang/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Вопросы по Golang", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/defer.md" b/content/3.golang/defer.md similarity index 98% rename from "content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/defer.md" rename to content/3.golang/defer.md index 1bc1f99..d796bd5 100644 --- "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/defer.md" +++ b/content/3.golang/defer.md @@ -1,7 +1,5 @@ --- title: Defer -sidebar_position: 6 -description: Вопросы по работе с defer в Golang --- ## Что такое defer, как работает, зачем нужен? diff --git "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/errors-panics.md" b/content/3.golang/errors-panics.md similarity index 98% rename from "content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/errors-panics.md" rename to content/3.golang/errors-panics.md index 3f5a125..185b9d6 100644 --- "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/errors-panics.md" +++ b/content/3.golang/errors-panics.md @@ -1,7 +1,5 @@ --- title: Ошибки / Panic -sidebar_position: 16 -description: Вопросы по ошибкам и паникам --- ## Что такое паника? diff --git "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/garbage-collector.md" b/content/3.golang/garbage-collector.md similarity index 95% rename from "content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/garbage-collector.md" rename to content/3.golang/garbage-collector.md index 37e4057..32ee0b4 100644 --- "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/garbage-collector.md" +++ b/content/3.golang/garbage-collector.md @@ -1,7 +1,5 @@ --- title: Конструкции -sidebar_position: 13 -description: Вопросы по конструкциям языка --- ## Гарантирует ли порядок выполнения конструкция select-case? @@ -31,4 +29,4 @@ default: Однако, если вы хотите, чтобы выполнение продолжилось и в следующем case, вы можете использовать ключевое слово fallthrough. -Надеюсь, это помогло вам лучше понять, как работает конструкция switch-case в Go! Если у вас есть еще вопросы, не стесняйтесь задавать. \ No newline at end of file +Надеюсь, это помогло вам лучше понять, как работает конструкция switch-case в Go! Если у вас есть еще вопросы, не стесняйтесь задавать. diff --git "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/generics.md" b/content/3.golang/generics.md similarity index 98% rename from "content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/generics.md" rename to content/3.golang/generics.md index 9abfbfa..b3ce788 100644 --- "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/generics.md" +++ b/content/3.golang/generics.md @@ -1,7 +1,5 @@ --- title: Дженерики -sidebar_position: 11 -description: Вопросы по дженерикам. --- ## Чем кодогенерация отличается от дженериков? diff --git a/content/3.golang/overall-questions.md b/content/3.golang/overall.md similarity index 60% rename from content/3.golang/overall-questions.md rename to content/3.golang/overall.md index 64db9d3..e06a6fb 100644 --- a/content/3.golang/overall-questions.md +++ b/content/3.golang/overall.md @@ -1,9 +1,90 @@ --- title: Общие вопросы -description: Вопросы по Golang не относящиеся к конкретным темам -sidebar_position: 1 --- +## Что такое type switch? + +> **`Type switch`** в Go - это способ проверить, какого типа является значение, хранящееся в интерфейсе. Это похоже на обычный **`switch`**, но вместо значений в кейсах указываются типы. + +```go +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. **Целочисленные типы**: **`int8`**, **`int16`**, **`int32`**, **`int64`**, **`uint8`**, **`uint16`**, **`uint32`**, **`uint64`**, **`byte`** (синоним для **`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: + +```go title="main.go" +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. + +Важно отметить, что такое поведение может привести к неожиданным результатам, поэтому всегда следует убедиться, что значения, которые вы записываете в переменные, не превышают максимально допустимые для их типа. + ## Какие технологические преимущества экосистемы Go вы можете назвать? В случае с экосистемой Go к потенциальным преимуществам можно отнести: @@ -37,9 +118,11 @@ Go - императивный язык программирования. Это В целом, сочетание меньшего объема памяти и планировщика пользовательского пространства делает горутины легким и эффективным механизмом для параллельного выполнения в программах на Go. ## Какие средства обобщенного программирования есть в Go? + В Go 1.18 появилась поддержка обобщенного программирования. Обобщенное программирование - это способность писать функции и типы, которые работают с любыми типами данных, а не только с конкретными типами данных. В Go 1.18 обобщенное программирование реализовано с помощью параметризованных типов и функций. ## Какие средства метапрограммирования есть в Go? + В Go нет средств метапрограммирования, таких как макросы, шаблоны. Вместо этого Go предоставляет мощную систему интерфейсов, которая позволяет писать гибкий и расширяемый код, который может быть легко адаптирован к различным типам данных. ## Какая сортировка используется в Golang? @@ -73,4 +156,4 @@ t := MyType{value: 5} result := t.StaticMethod() // result is 10 ``` -Это не совсем то же самое, что статический метод в языках с классами, но это ближайший аналог в Go. \ No newline at end of file +Это не совсем то же самое, что статический метод в языках с классами, но это ближайший аналог в Go. diff --git "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/package.md" b/content/3.golang/package.md similarity index 96% rename from "content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/package.md" rename to content/3.golang/package.md index 9792a2d..8fc7256 100644 --- "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/package.md" +++ b/content/3.golang/package.md @@ -1,7 +1,5 @@ --- title: Пакеты -sidebar_position: 4 -description: Вопросы по пакетам в Golang --- ## Что такое пакет? @@ -23,4 +21,4 @@ test │ └─ handler │ └─ opkg.go ├─ main.go -``` \ No newline at end of file +``` diff --git "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/race-condition.md" b/content/3.golang/race-condition.md similarity index 98% rename from "content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/race-condition.md" rename to content/3.golang/race-condition.md index e8e1c4d..7c81821 100644 --- "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/race-condition.md" +++ b/content/3.golang/race-condition.md @@ -1,7 +1,5 @@ --- title: Гонка данных -sidebar_position: 14 -description: Вопросы по гонке данных --- ## Что такое race condition? @@ -42,4 +40,4 @@ description: Вопросы по гонке данных Да, будет гонка данных. В Go, горутины выполняются параллельно, и если они обе пытаются изменить одну и ту же переменную (в данном случае, глобальный слайс), это может привести к неопределенному поведению. Это известно как гонка данных. -Чтобы избежать этого, вы можете использовать мьютексы или каналы для синхронизации доступа к общим ресурсам. \ No newline at end of file +Чтобы избежать этого, вы можете использовать мьютексы или каналы для синхронизации доступа к общим ресурсам. diff --git "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/sheduler.md" b/content/3.golang/sheduler.md similarity index 99% rename from "content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/sheduler.md" rename to content/3.golang/sheduler.md index 42ba102..56e2c21 100644 --- "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/sheduler.md" +++ b/content/3.golang/sheduler.md @@ -1,7 +1,5 @@ --- title: Планировщик -sidebar_position: 8 -description: Вопросы по планировщику Golang и OS. --- ## Как работает планировщик в Golang? diff --git "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/structs.md" b/content/3.golang/structs.md similarity index 95% rename from "content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/structs.md" rename to content/3.golang/structs.md index 1ac3c24..dee0f15 100644 --- "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/structs.md" +++ b/content/3.golang/structs.md @@ -1,7 +1,5 @@ --- title: Структуры -sidebar_position: 4 -description: Вопросы по структурам --- ## Имеет ли значение порядок полей в структуре? @@ -22,4 +20,4 @@ description: Вопросы по структурам - Порядок полей: Порядок полей в структуре может влиять на размер выравнивания. Если поля структуры переставить, размер структуры может измениться. - Архитектура системы: Размер выравнивания также может зависеть от архитектуры системы. Например, на 32-битной архитектуре структуры выравниваются под 4 байта. -Важно отметить, что выравнивание влияет на производительность и использование памяти, поэтому его следует учитывать при проектировании структур. \ No newline at end of file +Важно отметить, что выравнивание влияет на производительность и использование памяти, поэтому его следует учитывать при проектировании структур. diff --git "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/sync-primitives.md" b/content/3.golang/sync-primitives.md similarity index 99% rename from "content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/sync-primitives.md" rename to content/3.golang/sync-primitives.md index 7d26196..df45bf1 100644 --- "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/sync-primitives.md" +++ b/content/3.golang/sync-primitives.md @@ -1,7 +1,5 @@ --- title: Примитивы синхронизации -sidebar_position: 7 -description: Вопросы по примитивам синхронизации --- ## Какие примитивы синхронизации есть в Golang? @@ -277,4 +275,4 @@ RWMutex: Источники: - [Habr](https://qna.habr.com/q/787559) -- [Stackoverflow](https://stackoverflow.com/questions/48861029/what-is-the-benefit-of-using-rwmutex-instead-of-mutex) \ No newline at end of file +- [Stackoverflow](https://stackoverflow.com/questions/48861029/what-is-the-benefit-of-using-rwmutex-instead-of-mutex) diff --git "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/_category_.json" "b/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/_category_.json" deleted file mode 100644 index 7cd539a..0000000 --- "a/content/3.golang/\320\236\321\201\321\202\320\260\320\273\321\214\320\275\320\276\320\265/_category_.json" +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Остальное", - "position": 4, - "link": { - "type": "generated-index" - } -} diff --git "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/_category_.json" "b/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/_category_.json" deleted file mode 100644 index a7e4b5e..0000000 --- "a/content/3.golang/\320\237\320\260\321\200\320\260\320\273\320\273\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\270 \320\272\320\276\320\275\320\272\321\203\321\200\320\265\320\275\321\202\320\275\320\276\321\201\321\202\321\214/_category_.json" +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Параллельность и конкурентность", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/_category_.json" "b/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/_category_.json" deleted file mode 100644 index 8f9af40..0000000 --- "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/_category_.json" +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Типы данных", - "position": 1, - "link": { - "type": "generated-index" - } -} diff --git "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/overall.md" "b/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/overall.md" deleted file mode 100644 index 675f871..0000000 --- "a/content/3.golang/\320\242\320\270\320\277\321\213 \320\264\320\260\320\275\320\275\321\213\321\205/overall.md" +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Общие вопросы -description: Вопросы по типам данных в Golang -sidebar_position: 1 ---- - -## Что такое type switch? - -> **`Type switch`** в Go - это способ проверить, какого типа является значение, хранящееся в интерфейсе. Это похоже на обычный **`switch`**, но вместо значений в кейсах указываются типы. -> - -```go -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. **Целочисленные типы**: **`int8`**, **`int16`**, **`int32`**, **`int64`**, **`uint8`**, **`uint16`**, **`uint32`**, **`uint64`**, **`byte`** (синоним для **`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: - -```go title="main.go" -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. - -Важно отметить, что такое поведение может привести к неожиданным результатам, поэтому всегда следует убедиться, что значения, которые вы записываете в переменные, не превышают максимально допустимые для их типа. \ No newline at end of file