Go - это сбор собранных мусором языков. Вы не должны, и вы не можете удалять объекты из памяти. Это сборщик мусора обязанность и ответственность, чтобы сделать это, и он делает это автоматически. Сборщик мусора будет правильно удалять объекты из памяти, когда они становятся недоступными.
Вы можете назначить nil
картам и срезам, потому что nil
является допустимым значением (zero value) для этих типов. Нулевое значение для struct
типов не nil
, а значение struct
, где все его поля имеют свои нулевые значения.
Если вы хотите, чтобы очистить или перезаписать значение структуры, вы можете просто assign другое значение структура к нему, предпочтительно нулевое значение (пустая структура):
person1 := Person{name: "Name", age: 69}
// work with person1
// Clear person1:
person1 = Person{}
Но знайте, что это не будет свободной памяти выделено person1
; как было написано ранее, он автоматически будет освобожден GC, когда он станет недоступным.
nil
также допустимое значение (нулевое значение) для типов указателей, так что если person1
будет указатель на Person
(то есть, *Person
), вы можете также назначить nil
к нему, например:
person1 := &Person{name: "Name", age: 69}
// work with person1
// Clear person1:
person1 = nil
При очистке указателя, установив его на nil
, заостренный объект -again- позаботится GC.
Подробнее о том, как работает сборщик мусора, см. Golang - Cannot free memory once occupied by bytes.Buffer.
Каждый элемент такой переменной или значения устанавливается равным нулевому значению для своего типа: false для booleans, 0 для целых чисел, 0.0 для float, «» для строк и nil для указателей, функций, интерфейсов, срезов, каналов , и карты. – BlackMamba