Голанг де-ссылки на карту

Вот пример кода, который создает карту строковых ключей, имеющих значение bool.

myMap := make(map[string]bool)

myMap["Jan"] = true
myMap["Feb"] = false
myMap["Mar"] = true

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

Если я снова произвожу инициализацию myMap (как показано ниже), отменяет ли он ссылку на оригинал и подлежит ли сборке мусора?

myMap = make(map[string]bool)

1 ответ

Решение

Golang FAQ по сбору мусора:

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

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

myMap := make(map[string]bool)
for k, _ := range myMap{
    delete(myMap, k)
}

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

package main

import (
    "fmt"
)

func main() {
    myMap := make(map[string]bool)

    myMap["Jan"] = true
    myMap["Feb"] = false
    myMap["Mar"] = true
    fmt.Println(len(myMap))
    myMap = make(map[string]bool)
    fmt.Println(len(myMap))

}

Вместе с тем, если вы печатаете адрес, он указывает на тот же адрес.

fmt.Printf("address: %p \n", &myMap)
myMap = make(map[string]bool)
fmt.Printf("address: %p ", &myMap)

Пример детской площадки

Другие вопросы по тегам