Skip to content
This repository has been archived by the owner on Jul 4, 2024. It is now read-only.

Commit

Permalink
feature: v2: update golang directory struct
Browse files Browse the repository at this point in the history
  • Loading branch information
pers0na2dev committed Jun 18, 2024
1 parent d0a2443 commit 12c0a7a
Show file tree
Hide file tree
Showing 22 changed files with 94 additions and 160 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Массивы и слайсы
sidebar_position: 2
description: Вопросы по массивам и слайсам.
---

## Что такое слайс?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Строки
sidebar_position: 3
description: Вопросы по строкам в Golang.
---

## Что такое string или строки?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Хеш-мапы
sidebar_position: 1
description: Вопросы по хеш-мапам в Golang
---

## Что такое мапа?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Интерфейсы
sidebar_position: 5
description: Вопросы по интерфейсам в Golang
---

## Что такое интерфейс?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Указатели
sidebar_position: 17
description: Вопросы по указателям
---

## Что такое указатель?
Expand Down Expand Up @@ -150,4 +148,4 @@ func main() {
**Избегайте использования указателей, когда:**
1. **Вы работаете с небольшими структурами данных или простыми типами.** Для небольших структур данных или простых типов, таких как `int` или `bool`, передача по значению обычно быстрее и безопаснее.
2. **Вы не хотите, чтобы функция изменяла исходную переменную.** Если вы передаете переменную по значению, функция не сможет изменить исходную переменную, что может быть полезно для предотвращения неожиданных побочных эффектов.
3. **Вы хотите избежать ошибок во время выполнения, связанных с `nil`.** Если вы используете указатель, вам нужно быть уверенным, что он не `nil`, прежде чем обращаться к его значению, иначе вы получите панику во время выполнения.
3. **Вы хотите избежать ошибок во время выполнения, связанных с `nil`.** Если вы используете указатель, вам нужно быть уверенным, что он не `nil`, прежде чем обращаться к его значению, иначе вы получите панику во время выполнения.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Горутины
sidebar_position: 12
description: Вопросы по горутинам.
---

## Что такое горутина?
Expand Down Expand Up @@ -162,4 +160,4 @@ func worker(result chan string) {
- Неправильное использование каналов, например, отправка или получение из закрытого или неполного канала, или блокировка канала без возможности выхода.
- Неэффективное управление контекстами, например, отсутствие отмены или таймаута для контекстов, передаваемых в горутины.
- Неожиданные ошибки или паники, которые прерывают работу горутины, не освобождая ресурсы.
- Неоптимальный дизайн программы, например, создание избыточного количества горутин или недостаточный контроль над их жизненным циклом.
- Неоптимальный дизайн программы, например, создание избыточного количества горутин или недостаточный контроль над их жизненным циклом.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Контекст
sidebar_position: 16
description: Вопросы по контексту
---

## Что такое контекст?
Expand Down Expand Up @@ -79,4 +77,4 @@ defer cancel() // Make sure to cancel when done with context

3. **Проблемы с производительностью**: Создание нового контекста для каждого запроса с логгером может привести к увеличению накладных расходов и использованию памяти.

В конечном итоге, решение о том, передавать ли логгер через контекст, зависит от конкретных требований вашего приложения и вашего стиля программирования.
В конечном итоге, решение о том, передавать ли логгер через контекст, зависит от конкретных требований вашего приложения и вашего стиля программирования.
7 changes: 0 additions & 7 deletions content/3.golang/_category_.json

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Defer
sidebar_position: 6
description: Вопросы по работе с defer в Golang
---

## Что такое defer, как работает, зачем нужен?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Ошибки / Panic
sidebar_position: 16
description: Вопросы по ошибкам и паникам
---

## Что такое паника?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Конструкции
sidebar_position: 13
description: Вопросы по конструкциям языка
---

## Гарантирует ли порядок выполнения конструкция select-case?
Expand Down Expand Up @@ -31,4 +29,4 @@ default:

Однако, если вы хотите, чтобы выполнение продолжилось и в следующем case, вы можете использовать ключевое слово fallthrough.

Надеюсь, это помогло вам лучше понять, как работает конструкция switch-case в Go! Если у вас есть еще вопросы, не стесняйтесь задавать.
Надеюсь, это помогло вам лучше понять, как работает конструкция switch-case в Go! Если у вас есть еще вопросы, не стесняйтесь задавать.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Дженерики
sidebar_position: 11
description: Вопросы по дженерикам.
---

## Чем кодогенерация отличается от дженериков?
Expand Down
Original file line number Diff line number Diff line change
@@ -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 к потенциальным преимуществам можно отнести:
Expand Down Expand Up @@ -37,9 +118,11 @@ Go - императивный язык программирования. Это
В целом, сочетание меньшего объема памяти и планировщика пользовательского пространства делает горутины легким и эффективным механизмом для параллельного выполнения в программах на Go.

## Какие средства обобщенного программирования есть в Go?

В Go 1.18 появилась поддержка обобщенного программирования. Обобщенное программирование - это способность писать функции и типы, которые работают с любыми типами данных, а не только с конкретными типами данных. В Go 1.18 обобщенное программирование реализовано с помощью параметризованных типов и функций.

## Какие средства метапрограммирования есть в Go?

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

## Какая сортировка используется в Golang?
Expand Down Expand Up @@ -73,4 +156,4 @@ t := MyType{value: 5}
result := t.StaticMethod() // result is 10
```

Это не совсем то же самое, что статический метод в языках с классами, но это ближайший аналог в Go.
Это не совсем то же самое, что статический метод в языках с классами, но это ближайший аналог в Go.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Пакеты
sidebar_position: 4
description: Вопросы по пакетам в Golang
---

## Что такое пакет?
Expand All @@ -23,4 +21,4 @@ test
│ └─ handler
│ └─ opkg.go
├─ main.go
```
```
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Гонка данных
sidebar_position: 14
description: Вопросы по гонке данных
---

## Что такое race condition?
Expand Down Expand Up @@ -42,4 +40,4 @@ description: Вопросы по гонке данных

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

Чтобы избежать этого, вы можете использовать мьютексы или каналы для синхронизации доступа к общим ресурсам.
Чтобы избежать этого, вы можете использовать мьютексы или каналы для синхронизации доступа к общим ресурсам.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Планировщик
sidebar_position: 8
description: Вопросы по планировщику Golang и OS.
---

## Как работает планировщик в Golang?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Структуры
sidebar_position: 4
description: Вопросы по структурам
---

## Имеет ли значение порядок полей в структуре?
Expand All @@ -22,4 +20,4 @@ description: Вопросы по структурам
- Порядок полей: Порядок полей в структуре может влиять на размер выравнивания. Если поля структуры переставить, размер структуры может измениться.
- Архитектура системы: Размер выравнивания также может зависеть от архитектуры системы. Например, на 32-битной архитектуре структуры выравниваются под 4 байта.

Важно отметить, что выравнивание влияет на производительность и использование памяти, поэтому его следует учитывать при проектировании структур.
Важно отметить, что выравнивание влияет на производительность и использование памяти, поэтому его следует учитывать при проектировании структур.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---
title: Примитивы синхронизации
sidebar_position: 7
description: Вопросы по примитивам синхронизации
---

## Какие примитивы синхронизации есть в Golang?
Expand Down Expand Up @@ -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)
- [Stackoverflow](https://stackoverflow.com/questions/48861029/what-is-the-benefit-of-using-rwmutex-instead-of-mutex)
7 changes: 0 additions & 7 deletions content/3.golang/Остальное/_category_.json

This file was deleted.

This file was deleted.

7 changes: 0 additions & 7 deletions content/3.golang/Типы данных/_category_.json

This file was deleted.

Loading

0 comments on commit 12c0a7a

Please sign in to comment.