Встречается на 8% собеседований по Go

Что будет в Map, если не делать make или short assign

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

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

text
```go
package main

import "fmt"

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

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

Этот код приведет к панике с сообщением об ошибке:

text
```
panic: assignment to entry in nil map
```

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

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

text
   ```go
   package main

   import "fmt"

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

2. Использование литерала карты:

text
   ```go
   package main

   import "fmt"

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

Пример:

text
```go
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`. Попытка добавить элементы в такую карту приведет к панике. Чтобы избежать этого, необходимо инициализировать карту перед использованием.

June 2, 2024, easyoffer

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы