Golang | Вопросы собесов
4.33K subscribers
28 photos
694 links
Download Telegram
Что такое тип rune Зачем их использовать ?
Спросят с вероятностью 8%

Тип rune представляет собой alias для типа int32, предназначенного для хранения Unicode кодовых точек.

Зачем он нужен?

1️⃣Работа с символами Unicode:
Строки (string) являются последовательностями байтов, а не символов. Это означает, что один символ может занимать больше одного байта, особенно если это символ из расширенного набора Unicode.
Тип используется для работы с символами, представляемыми одной кодовой точкой Unicode. Это упрощает манипуляции с символами, так как каждая rune — это отдельный символ, независимо от его длины в байтах.

2️⃣Повышение читабельности кода:
Использование типа rune делает код более понятным и само-документируемым. Когда в коде виден тип rune, это сразу указывает на то, что переменная предназначена для хранения одного символа, а не целого числа.

Как его использовать ?

1️⃣Создание и инициализация:
      var r rune = '世'
fmt.Println(r) // Output: 19990

Здесь символ '世' представлен в виде Unicode кодовой точки и сохраняется как rune.

2️⃣Итерация по строке:
      s := "Привет, 世界"
for _, r := range s {
fmt.Printf("%c ", r)
}
// Output: П р и в е т , 世 界

В данном примере используется цикл for range, чтобы итерироваться по строке и извлекать каждый символ в виде rune.

3️⃣Преобразование между `string` ито такое
      s := "Go"
runes := []rune(s)
fmt.Println(runes) // Output: [71 111]

s2 := string(runes)
fmt.Println(s2) // Output: Go

Можно преобразовать строку в срез rune и обратно, что позволяет легко манипулировать отдельными символами строки.

rune — это тип в Go для представления одного символа Unicode, помогающий проще работать с символами и делать код более понятным. Это важно для правильной обработки текста, содержащего символы вне ASCII

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🤔 Какой интерфейс в Go используется для записи данных в буфер?
Anonymous Quiz
46%
io.Writer
8%
io.Reader
42%
bufio.Buffer
3%
fmt.Writer
Какие функции у map ?
Спросят с вероятностью 8%

Карты (maps) предоставляют несколько основных функций и операций для работы с ними. Эти функции позволяют добавлять, удалять, получать значения и проверять наличие ключей в карте. Вот основные функции и операции, которые можно выполнять с ними.

Основные операции:

1️⃣Объявление карты

Для этого используется ключевое слово map, после которого указываются типы ключей и значений.
var myMap map[string]int


2️⃣Инициализация карты

Это можно сделать с помощью функции make или литерала карты.
// Инициализация с помощью make
myMap = make(map[string]int)

// Инициализация с помощью литерала карты
myMap = map[string]int{
"Alice": 25,
"Bob": 30,
}


3️⃣Добавление и обновление элементов

Для этого используется синтаксис индексирования.
myMap["Charlie"] = 35
myMap["Alice"] = 26 // обновление значения по ключу "Alice"


4️⃣Извлечение значения по ключу

Для этого используется синтаксис индексирования.
age := myMap["Alice"]
fmt.Println(age) // 26


5️⃣Проверка существования ключа

Чтобы проверить это можно использовать двойное присваивание.
age, exists := myMap["David"]
if exists {
fmt.Println("Age of David:", age)
} else {
fmt.Println("David not found")
}


6️⃣Удаление элемента

Для этого используется встроенная функция delete.
delete(myMap, "Bob")


7️⃣Итерация по карте

Для этого используется цикл for range.
for key, value := range myMap {
fmt.Printf("Key: %s, Value: %d\n", key, value)
}


Пример:
package main

import (
"fmt"
)

func main() {
// Инициализация карты с помощью литерала
myMap := map[string]int{
"Alice": 25,
"Bob": 30,
}

// Добавление нового элемента
myMap["Charlie"] = 35

// Обновление существующего элемента
myMap["Alice"] = 26

// Извлечение значения по ключу
age := myMap["Alice"]
fmt.Println("Age of Alice:", age) // 26

// Проверка существования ключа
age, exists := myMap["David"]
if exists {
fmt.Println("Age of David:", age)
} else {
fmt.Println("David not found")
}

// Удаление элемента
delete(myMap, "Bob")

// Итерация по карте
for key, value := range myMap {
fmt.Printf("Key: %s, Value: %d\n", key, value)
}
}


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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🤔 Какой интерфейс в Go определяет метод для получения длины?
Anonymous Quiz
11%
fmt.Len
11%
size.Length
10%
interface.Length
68%
len() int
Что такое тип byte ?
Спросят с вероятностью 8%

Тип byte представляет собой алиас для типа uint8, то есть беззнакового целого числа размером 8 бит.

Зачем он нужен?

1️⃣Работа с байтами:
Строки (string) представляют собой последовательности байтов. Когда мы работаем с текстом на уровне байтов, использование типа byte помогает явно указать, что мы имеем дело с отдельными байтами, а не с числами или символами.

2️⃣Улучшение читабельности кода:
Использование делает код более понятным и само-документируемым. Когда в коде виден, это сразу указывает на то, что переменная предназначена для хранения именно байта данных.

3️⃣Эффективная работа с бинарными данными:
Часто используется для работы с бинарными файлами, сетевыми пакетами и любыми другими видами данных, где важен доступ к отдельным байтам.

Как его использовать?

1️⃣Создание и инициализация:
      var b byte = 65
fmt.Println(b) // Output: 65
fmt.Printf("%c\n", b) // Output: A

Здесь переменная b хранит значение 65, которое соответствует символу 'A' в таблице ASCII.

2️⃣Итерация по строке как по последовательности байтов:
      s := "Hello"
for i := 0; i < len(s); i++ {
fmt.Printf("%c ", s[i])
}
// Output: H e l l o

В данном примере мы итерируемся по строке и обрабатываем каждый байт отдельно.

3️⃣Преобразование между `string` ито такое т
      s := "Go"
bytes := []byte(s)
fmt.Println(bytes) // Output: [71 111]

s2 := string(bytes)
fmt.Println(s2) // Output: Go

Можно преобразовать строку в срез byte и обратно, что позволяет легко манипулировать данными на уровне байтов.

byte — это тип для представления одного байта данных (8 бит), помогающий работать с бинарными данными и делать код более понятным. Это важно для точной обработки текстовых и бинарных данных.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🤔 Как в Go объявить инициализатор структуры, выполняющийся при создании экземпляра?
Anonymous Quiz
22%
func init()
31%
func new()
37%
func (s *Struct) init()
9%
func (s *Struct) Constructor()
Как быстро можно что-то найти, если искать по индексу в слайсе и в Маппе ?
Спросят с вероятностью 8%

Когда нужно быстро найти элемент в коллекции данных, выбор между слайсом и картой зависит от типа поиска и требований к производительности. Сейчас разберем, как работает поиск в слайсе и карте, и какие из них подходят для различных ситуаций.

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

import (
"fmt"
)

func findElement(slice []int, value int) (int, bool) {
for i, v := range slice {
if v == value {
return i, true
}
}
return -1, false
}

func main() {
slice := []int{1, 2, 3, 4, 5}
index, found := findElement(slice, 3)
if found {
fmt.Printf("Element found at index %d\n", index)
} else {
fmt.Println("Element not found")
}
}


Временная сложность линейного поиска составляет O(n), где n — количество элементов в слайсе. Это означает, что время поиска увеличивается пропорционально количеству элементов в слайсе.

Карты (maps) реализованы на основе хеш-таблиц, что позволяет выполнять поиск по ключу очень быстро, обычно за константное время.
package main

import (
"fmt"
)

func main() {
myMap := map[string]int{
"Alice": 25,
"Bob": 30,
"Carol": 35,
}

value, exists := myMap["Bob"]
if exists {
fmt.Printf("Value: %d\n", value)
} else {
fmt.Println("Key not found")
}
}


Временная сложность поиска в карте составляет O(1) в среднем случае, что означает, что время поиска не зависит от количества элементов в карте.

Сравнение производительности

Слайс: Поиск по значению требует линейного времени O(n). Слайсы подходят для небольших наборов данных или когда порядок элементов имеет значение.
Карта: Поиск по ключу выполняется за константное время O(1) в среднем. Карты идеальны для случаев, когда нужен быстрый доступ к элементам по уникальному ключу, независимо от размера набора данных.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🤔 Как в Go определить инициализацию переменной при первом обращении к ней?
Anonymous Quiz
39%
sync.Once
4%
sync.Do
55%
sync.Init
2%
sync.Setup
Как правильно объявлять Маппу ?
Спросят с вероятностью 8%

Карты (maps) объявляются с использованием ключевого слова map. Карты представляют собой ассоциативные массивы или хеш-таблицы, которые сопоставляют ключи с значениями.

Объявление карты

Для этого необходимо указать тип ключа и тип значения. Общий синтаксис выглядит следующим образом:
var myMap map[KeyType]ValueType


Пример:
var ages map[string]int

Здесь ages — это карта, где ключи имеют тип string, а значения — int.

Инициализация карты

Использование функции make


Создает и инициализирует карту:
ages := make(map[string]int)


Литерал карты

Для инициализации:
ages := map[string]int{
"Alice": 25,
"Bob": 30,
}


Работа с ними

Элементы добавляются или обновляются с использованием синтаксиса индексирования:
ages["Charlie"] = 35


Извлечение элементов

Для этого используется синтаксис индексирования:
age := ages["Alice"]
fmt.Println(age) // 25


Проверка существования ключа

Для этого можно использовать двойное присваивание:
age, exists := ages["David"]
if exists {
fmt.Println("Age of David:", age)
} else {
fmt.Println("David not found")
}


Удаление элементов

Для этого используется встроенная функция delete:
delete(ages, "Alice")


Пример:
package main

import (
"fmt"
)

func main() {
// Объявление и инициализация карты
ages := make(map[string]int)

// Добавление элементов
ages["Alice"] = 25
ages["Bob"] = 30

// Извлечение элементов
fmt.Println("Age of Alice:", ages["Alice"])
fmt.Println("Age of Bob:", ages["Bob"])

// Проверка существования ключа
if age, exists := ages["Charlie"]; exists {
fmt.Println("Age of Charlie:", age)
} else {
fmt.Println("Charlie not found")
}

// Удаление элемента
delete(ages, "Alice")

// Итерация по карте
for name, age := range ages {
fmt.Printf("%s is %d years old\n", name, age)
}
}


Карты предоставляют гибкий и эффективный способ работы с ассоциативными массивами. Для их использования нужно объявить типы ключей и значений, инициализировать карту, а затем добавлять, извлекать и удалять элементы по мере необходимости.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🤔 Какой метод структуры используется для сериализации объекта в JSON формат?
Anonymous Quiz
6%
Encode
76%
Marshal
10%
Unmarshal
8%
Serialize
Как думаешь, будут ли MAP ordered ?
Спросят с вероятностью 8%

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

Почему они не упорядочены?

Карты реализованы как хеш-таблицы, что обеспечивает эффективный доступ к элементам по ключу, но не гарантирует порядок хранения элементов. Основная цель использования карт — это быстрое получение значения по ключу, а не упорядоченное хранение данных.

Какие проблемы могут возникнуть?

1️⃣Непредсказуемый порядок: При каждой итерации по карте порядок элементов может меняться.
        m := map[string]int{"a": 1, "b": 2, "c": 3}
for k, v := range m {
fmt.Println(k, v)
}
// Порядок вывода может быть разным при каждом запуске.


2️⃣Отсутствие последовательности: Невозможно предсказать порядок вставки и извлечения данных, что может быть критичным для некоторых алгоритмов.

Что делать, если нужен упорядоченный вывод?

1️⃣Срезы для сортировки ключей:
        m := map[string]int{"a": 1, "b": 2, "c": 3}
var keys []string
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}


2️⃣Использование структур или других пакетов:
Можно использовать специальные структуры данных или пакеты, которые поддерживают упорядоченные карты, например, orderedmap.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🤔 Какой интерфейс должен реализовывать тип, чтобы его можно было использовать в качестве ключа в map?
Anonymous Quiz
10%
fmt.Stringer
25%
hashable
54%
comparable
11%
keyable
Какие циклы есть в Go ?
Спросят с вероятностью 8%

Существует один основной цикл — это цикл for. н может использоваться в различных формах, выполняя функции традиционных циклов while, do-while и классического for.
Формы цикла

1️⃣С тремя выражениями:
      package main

import "fmt"

func main() {
for i := 0; i < 5; i++ {
fmt.Println(i)
}
}

В этом примере классический цикл for состоит из трех частей: инициализация (i := 0), условие (i < 5) и инкремент (i++). Этот формат аналогичен циклу for в других языках программирования, таких как C или Java.

2️⃣Как `while`:
      package main

import "fmt"

func main() {
i := 0
for i < 5 {
fmt.Println(i)
i++
}
}

В данном случае цикл for используется как while. Условие (i < 5) проверяется перед каждой итерацией, и цикл продолжается, пока условие истинно.

3️⃣Бесконечный:
      package main

import "fmt"

func main() {
i := 0
for {
if i >= 5 {
break
}
fmt.Println(i)
i++
}
}

Бесконечный цикл создается с использованием for без условий. Для выхода из такого цикла необходимо использовать операторы break или return.

4️⃣ С использованием range :
      package main

import "fmt"

func main() {
arr := []int{1, 2, 3, 4, 5}
for index, value := range arr {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
}


Цикл for с использованием range позволяет итерироваться по элементам массивов, срезов, карт, строк и каналов. В данном примере index представляет индекс текущего элемента, а value — его значение.

Примеры:

1️⃣Итерация по массиву:
      arr := [5]int{10, 20, 30, 40, 50}
for i := 0; i < len(arr); i++ {
fmt.Println(arr[i])
}


2️⃣Итерация по карте:
      m := map[string]int{"a": 1, "b": 2, "c": 3}
for key, value := range m {
fmt.Printf("Key: %s, Value: %d\n", key, value)
}


3️⃣Итерация по строке:
      s := "hello"
for index, char := range s {
fmt.Printf("Index: %d, Char: %c\n", index, char)
}


Есть только один основной цикл — for, который можно использовать как классический for, while, бесконечный цикл или цикл по коллекциям с range. Этот подход обеспечивает гибкость и простоту написания циклов в различных ситуациях.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🤔 Какой метод нужно реализовать, чтобы структура удовлетворяла интерфейсу fmt.Stringer?
Anonymous Quiz
21%
ToString() string
10%
Format() string
64%
String() string
5%
Print() string
Как работать со слайсами ?
Спросят с вероятностью 8%

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

Что это такое?

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

Основные операции:

Существует несколько способов создания:

1️⃣Создание слайса из массива:
        arr := [5]int{1, 2, 3, 4, 5}
slice := arr[1:4] // содержит элементы с индексами 1, 2, 3
fmt.Println(slice) // [2 3 4]


2️⃣Создание слайса с помощью встроенной функции `make`:
        slice := make([]int, 5) // слайс из 5 элементов, инициализированных нулями
fmt.Println(slice) // [0 0 0 0 0]


3️⃣Создание слайса литералом:
        slice := []int{1, 2, 3, 4, 5}
fmt.Println(slice) // [1 2 3 4 5]


Изменение размера слайса

С помощью функции append:
slice := []int{1, 2, 3}
slice = append(slice, 4, 5) // добавляем элементы 4 и 5 в конец слайса
fmt.Println(slice) // [1 2 3 4 5]


Доступ к элементам слайса и изменение их

Аналогичны работе с массивами:
slice := []int{1, 2, 3}
fmt.Println(slice[1]) // 2
slice[1] = 20
fmt.Println(slice) // [1 20 3]


Итерация по слайсу

Выполняется с помощью цикла for:
slice := []int{1, 2, 3, 4, 5}
for i, v := range slice {
fmt.Printf("Index: %d, Value: %d\n", i, v)
}


Копирование

Для этого используется функция copy:
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src)
fmt.Println(dst) // [1 2 3]


Особенности

Емкость и длина: Он имеет два атрибута: длину (количество элементов) и емкость (максимальное количество элементов, которое может быть размещено без выделения новой памяти).
        slice := make([]int, 3, 5) // длина 3, емкость 5
fmt.Println(len(slice)) // 3
fmt.Println(cap(slice)) // 5


Срез (slicing): Можно создавать новые слайсы из существующих.
        slice := []int{1, 2, 3, 4, 5}
newSlice := slice[1:4]
fmt.Println(newSlice) // [2 3 4]


Слайсы — это гибкие и удобные структуры данных для работы с последовательностями элементов. Они обеспечивают простое создание, изменение размера, доступ к элементам и итерацию по ним. Благодаря встроенным функциям, таким как append и copy, работа со слайсами становится ещё проще.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
Golang | Вопросы собесов pinned «👾 349 вопросов собесов на Golang Developer 🔒 База реальных собесов 🔒 База тестовых заданий 👾 Список менторов 👣 Golang ├ Вакансии ├ LeetCode ответы └ Тесты 👩‍💻 С/С++ ├ Вопросы собесов ├ Вакансии ├ LeetCode ответы └ Тесты 👩‍💻 PHP ├ Вопросы собесов ├ Вакансии…»
🤔 Какое ключевое слово используется для объявления неименованного канала в Go?
Anonymous Quiz
7%
channel
72%
chan
15%
make
6%
new
Что такое указатели ?
Спросят с вероятностью 8%

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

Зачем они нужны?

1️⃣Эффективность:
Указатели позволяют передавать большие структуры данных в функции без необходимости копирования. Вместо этого передается адрес структуры, что экономит память и время выполнения.

2️⃣Модификация данных:
Указатели позволяют функциям изменять значения переменных, передаваемых им в качестве аргументов. Это позволяет создавать более гибкие и мощные функции.

3️⃣Создание сложных структур данных:
Указатели используются для создания ссылочных типов данных, таких как связные списки, деревья и графы.

Как их использовать?

1️⃣Создание и использование:
      package main

import "fmt"

func main() {
var x int = 10
var p *int // Объявление указателя на int
p = &x // Присваивание указателю адреса переменной x

fmt.Println("Value of x:", x) // Output: 10
fmt.Println("Address of x:", p) // Вывод адреса x
fmt.Println("Value via p:", *p) // Разыменование указателя, Output: 10
}

Здесь переменная p является указателем на int и хранит адрес переменной x. Разыменование указателя (*p) позволяет получить значение, хранящееся по этому адресу.

2️⃣Функции:
      package main

import "fmt"

func main() {
x := 10
fmt.Println("Before:", x) // Output: 10

increment(&x)
fmt.Println("After:", x) // Output: 11
}

func increment(p *int) {
*p++ // Увеличение значения по адресу, на который указывает p
}

В данном примере функция increment принимает указатель на int и увеличивает значение по этому адресу. Это позволяет изменять значение переменной x непосредственно.

3️⃣Использование со структурами:
      package main

import "fmt"

type Person struct {
name string
age int
}

func main() {
p := Person{name: "Alice", age: 30}
fmt.Println("Before:", p) // Output: {Alice 30}

updatePerson(&p)
fmt.Println("After:", p) // Output: {Alice 31}
}

func updatePerson(p *Person) {
p.age++ // Изменение поля структуры через указатель
}

В этом примере функция updatePerson изменяет поле структуры Person через указатель на эту структуру.

Преимущества:
Эффективность работы с памятью: Указатели позволяют передавать данные без копирования, что улучшает производительность.
Гибкость в изменении данных: Указатели позволяют функциям изменять переданные им данные.
Поддержка сложных структур данных: Указатели необходимы для создания динамических структур данных.

Недостатки:
Сложность управления памятью: Неправильное использование указателей может привести к утечкам памяти и ошибкам, таким как разыменование нулевого указателя.
Усложнение кода: Работа с указателями может сделать код менее читаемым и трудным для отладки.

Указатели — это переменные, которые хранят адреса других переменных. Они помогают эффективно управлять памятью и позволяют функциям изменять переданные им данные. Однако неправильное использование указателей может привести к ошибкам.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🤔 Какой тип должен реализовывать метод Error() string?
Anonymous Quiz
57%
error
7%
fmt.Stringer
11%
string
26%
fmt.Error
Что будет в Map, если не делать make или short assign ?
Спросят с вероятностью 8%

Карты (maps) необходимо инициализировать перед использованием. Если карта не была инициализирована с помощью функции make или литерала карты, она будет иметь нулевое значение nil. Попытка добавить элементы в такую карту приведет к панике (panic).

Пример с неинициализированной картой
package main

import "fmt"

func main() {
var myMap map[string]int
// Карта не инициализирована, её значение - nil
fmt.Println(myMap) // Output: map[]

// Попытка добавить элемент в неинициализированную карту
// Это вызовет панику
myMap["key"] = 1
}


Этот код приведет к панике с сообщением об ошибке:
panic: assignment to entry in nil map


Инициализация карты

Чтобы избежать паники, карту необходимо инициализировать перед использованием. Есть 2 способа:

1️⃣Использование функции `make`:
      package main

import "fmt"

func main() {
// Инициализация карты с помощью make
myMap := make(map[string]int)
myMap["key"] = 1
fmt.Println(myMap) // Output: map[key:1]
}


2️⃣Использование литерала карты:
      package main

import "fmt"

func main() {
// Инициализация карты с помощью литерала карты
myMap := map[string]int{
"key1": 1,
"key2": 2,
}
fmt.Println(myMap) // Output: map[key1:1 key2:2]
}


Пример:
package main

import "fmt"

func main() {
// Инициализация карты с помощью make
myMap := make(map[string]int)

// Добавление элементов в карту
myMap["one"] = 1
myMap["two"] = 2

// Вывод карты
fmt.Println(myMap) // Output: map[one:1 two:2]

// Доступ к элементу карты
value := myMap["one"]
fmt.Println("Value for key 'one':", value) // Output: Value for key 'one': 1

// Проверка наличия ключа в карте
if val, exists := myMap["three"]; exists {
fmt.Println("Key 'three' exists with value:", val)
} else {
fmt.Println("Key 'three' does not exist")
}

// Удаление элемента из карты
delete(myMap, "two")
fmt.Println(myMap) // Output: map[one:1]
}


Если карта не была инициализирована с помощью make или литерала карты, она будет nil. Попытка добавить элементы в такую карту приведет к панике. Чтобы избежать этого, необходимо инициализировать карту перед использованием.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых