J'ai une carte:
var sessions = map[string] chan int{}
Comment supprimer sessions[key]
? J'ai essayé:
sessions[key] = nil,false;
Cela n'a pas fonctionné.
Mise à jour (novembre 2011):
La syntaxe spéciale de suppression des entrées de carte est supprimée dans Go version 1 :
1 Go va supprimer l'affectation de carte spéciale et d' introduire une nouvelle fonction intégrée,
delete
:delete(m, x)
supprime l'entrée de carte récupérée par l'expressionm[x]
. ...
sessions["moo"] = sessions["moo"], false;
(ou est-ce faux?)Copié des notes de version de Go 1
Dans l'ancienne langue, pour supprimer l'entrée à clé
k
de la carte représentée parm
, on écrivait la déclaration,Cette syntaxe était un cas particulier particulier, la seule affectation à deux contre un. Il a fallu passer une valeur (généralement ignorée) qui est évaluée mais ignorée, plus un booléen qui était presque toujours la constante false. Il a fait le travail mais était étrange et un point de discorde.
Dans Go 1, cette syntaxe a disparu; il y a une place nouvelle fonction intégrée,
delete
. L'appelsupprimera l'entrée de mappe récupérée par l'expression
m[k]
. Il n'y a pas de valeur de retour. La suppression d'une entrée inexistante est un non-op.Mise à jour: l' exécution
go fix
convertira les expressions du formulairem[k] = value, false
endelete(m, k)
lorsqu'il est clair que la valeur ignorée peut être supprimée du programme en toute sécurité et sefalse
réfère à la constante booléenne prédéfinie. L'outil de correction signalera les autres utilisations de la syntaxe pour inspection par le programmeur.la source
De Effective Go :
la source
sessions.go:6: cannot use 0 (type int) as type chan int
assignment count mismatch: 1 = 2 (use delete)
Ces jours-ci, rien ne va s'écraser.
la source
Utilisez à la
make (chan int)
place denil
. La première valeur doit être du même type que votre carte.MISE À JOUR: J'ai corrigé ma réponse.
la source
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);}