Ich habe eine Karte:
var sessions = map[string] chan int{}
Wie lösche ich sessions[key]
? Ich habe es versucht:
sessions[key] = nil,false;
Das hat nicht funktioniert.
Update (November 2011):
Die spezielle Syntax zum Löschen von Karteneinträgen wurde in Go Version 1 entfernt :
Go 1 entfernt die spezielle Kartenzuweisung und führt eine neue integrierte Funktion ein
delete
:delete(m, x)
löscht den vom Ausdruck abgerufenen Karteneintragm[x]
. ...
sessions["moo"] = sessions["moo"], false;
Von Go 1- Versionshinweisen kopiert
In der alten Sprache schrieb man die Anweisung, um den Eintrag mit dem Schlüssel
k
von der durch dargestellten Karte zu löschenm
:Diese Syntax war ein besonderer Sonderfall, die einzige Zwei-zu-Eins-Zuordnung. Es war erforderlich, einen Wert (normalerweise ignoriert) zu übergeben, der ausgewertet, aber verworfen wird, sowie einen Booleschen Wert, der fast immer die Konstante false war. Es hat den Job gemacht, war aber seltsam und ein Streitpunkt.
In Go 1 ist diese Syntax weg; Stattdessen gibt es eine neue eingebaute Funktion
delete
. Der Anruflöscht den vom Ausdruck abgerufenen Karteneintrag
m[k]
. Es gibt keinen Rückgabewert. Das Löschen eines nicht vorhandenen Eintrags ist ein No-Op.Aktualisierung: Laufen
go fix
werden Ausdrücke der Form umwandelnm[k] = value, false
indelete(m, k)
wenn es klar ist , dass der Wert ignoriert sicher aus dem Programm und entsorgt werden ,false
auf die vordefinierte Boolesche Konstante bezeichnet. Das Fix-Tool kennzeichnet andere Verwendungen der Syntax zur Überprüfung durch den Programmierer.quelle
Von Anfang an :
quelle
sessions.go:6: cannot use 0 (type int) as type chan int
assignment count mismatch: 1 = 2 (use delete)
In diesen Tagen wird nichts abstürzen.
quelle
Verwenden Sie
make (chan int)
anstelle vonnil
. Der erste Wert muss derselbe Typ sein, den Ihre Karte enthält.UPDATE: Meine Antwort wurde korrigiert.
quelle
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);}