У меня есть карта:
var sessions = map[string] chan int{}
Как мне удалить sessions[key]
? Я попытался:
sessions[key] = nil,false;
Это не сработало.
Обновление (ноябрь 2011):
Специальный синтаксис для удаления записей карты удален в версии Go 1 :
Go 1 удалит специальное назначение карты и введет новую встроенную функцию
delete
:delete(m, x)
удалит запись карты, извлеченную выражениемm[x]
. ...
sessions["moo"] = sessions["moo"], false;
(или это неправильно?)Скопировано из примечаний к выпуску Go 1
На старом языке, чтобы удалить запись с ключом
k
из карты, представленнойm
, один написал заявление,Этот синтаксис был своеобразным частным случаем, единственным присваиванием два к одному. Требуется передать значение (обычно игнорируемое), которое оценивается, но отбрасывается, плюс логическое значение, которое почти всегда было константой false. Это сделало работу, но было странным и предметом спора.
В Go 1 этот синтаксис исчез; вместо этого есть новая встроенная функция
delete
. Звонокудалит запись карты, извлеченную выражением
m[k]
. Нет возвращаемого значения. Удаление несуществующей записи не допускается.Обновление: Запуск
go fix
будет преобразовывать выражение видаm[k] = value, false
в ,delete(m, k)
когда ясно , что игнорировали значение может быть безопасно выброшено из программы иfalse
относится к предварительно заданной булевой константе. Инструмент исправления помечает другое использование синтаксиса для проверки программистом.источник
С Эффективного Go :
источник
sessions.go:6: cannot use 0 (type int) as type chan int
assignment count mismatch: 1 = 2 (use delete)
В эти дни ничего не потерпит крах.
источник
Используйте
make (chan int)
вместоnil
. Первое значение должно быть того же типа, что и ваша карта.ОБНОВЛЕНИЕ: исправил мой ответ.
источник
sessions.go:6: cannot use 0 (type int) as type chan int
package main func main () {var sessions = map[string] chan int{};sessions["moo"] = make (chan int);}