Tengo un mapa:
var sessions = map[string] chan int{}
¿Cómo lo elimino sessions[key]
? Lo intenté:
sessions[key] = nil,false;
Eso no funcionó.
Actualización (noviembre de 2011):
La sintaxis especial para eliminar entradas de mapas se elimina en Go versión 1 :
Ir 1 eliminará la asignación especial del mapa e introducirá una nueva función incorporada
delete
:delete(m, x)
borrará la entrada del mapa recuperada por la expresiónm[x]
. ...
sessions["moo"] = sessions["moo"], false;
(? O es que mal)Copiado de las notas de la versión Go 1
En el idioma anterior, para eliminar la entrada con clave
k
del mapa representado porm
, se escribió la declaración,Esta sintaxis era un caso especial peculiar, la única asignación de dos a uno. Se requería pasar un valor (generalmente ignorado) que se evalúa pero se descarta, más un valor booleano que casi siempre era la constante falsa. Hizo el trabajo pero era extraño y un punto de discusión.
En Go 1, esa sintaxis se ha ido; en su lugar hay una nueva función incorporada,
delete
. La llamadaeliminará la entrada del mapa recuperada por la expresión
m[k]
. No hay valor de retorno. Eliminar una entrada inexistente es un no-op.Actualización: la ejecución
go fix
convertirá expresiones del formulariom[k] = value, false
endelete(m, k)
cuando esté claro que el valor ignorado se puede descartar de forma segura del programa y sefalse
refiere a la constante booleana predefinida. La herramienta de reparación marcará otros usos de la sintaxis para la inspección del programador.fuente
De Go eficaz :
fuente
sessions.go:6: cannot use 0 (type int) as type chan int
assignment count mismatch: 1 = 2 (use delete)
En estos días, nada se estrellará.
fuente
Usar en
make (chan int)
lugar denil
. El primer valor tiene que ser del mismo tipo que su mapa.ACTUALIZACIÓN: Corrigió mi respuesta.
fuente
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);}