Mam mapę:
var sessions = map[string] chan int{}
Jak mogę usunąć sessions[key]
? Próbowałem:
sessions[key] = nil,false;
To nie zadziałało.
Aktualizacja (listopad 2011):
Specjalna składnia do usuwania wpisów mapy została usunięta w wersji Go 1 :
Go 1 usunie specjalne przypisanie mapy i wprowadzi nową wbudowaną funkcję
delete
::delete(m, x)
usunie wpis mapy pobrany przez wyrażeniem[x]
. ...
sessions["moo"] = sessions["moo"], false;
(a może to źle?)Skopiowano z informacji o wersji Go 1
W starym języku, aby usunąć wpis z kluczem
k
z mapy reprezentowanej przezm
, napisano instrukcję,Ta składnia była szczególnym przypadkiem, jedynym przypisaniem dwa do jednego. Wymagało to przekazania wartości (zwykle ignorowanej), która jest oceniana, ale odrzucana, plus wartość logiczna, która prawie zawsze była stałą fałszem. Spełniło to zadanie, ale było dziwne i sporne.
W Go 1 ta składnia zniknęła; Zamiast tego jest nowa wbudowanej funkcji
delete
. Telefonusunie wpis mapy pobrany przez wyrażenie
m[k]
. Nie ma wartości zwracanej. Usunięcie nieistniejącego wpisu nie jest możliwe.Aktualizacja: Uruchomienie
go fix
konwertuje wyrażenia formularzam[k] = value, false
nadelete(m, k)
wtedy, gdy jest jasne, że ignorowaną wartość można bezpiecznie usunąć z programu ifalse
odwołuje się do wstępnie zdefiniowanej stałej boolowskiej. Narzędzie naprawcze oznaczy inne zastosowania składni do sprawdzenia przez programistę.źródło
Od Effective Go :
źródło
sessions.go:6: cannot use 0 (type int) as type chan int
assignment count mismatch: 1 = 2 (use delete)
W dzisiejszych czasach nic się nie zawali.
źródło
Użyj
make (chan int)
zamiastnil
. Pierwsza wartość musi być tego samego typu, co twoja mapa.UPDATE: Poprawiłem moją odpowiedź.
źródło
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);}