Eu tenho um mapa:
var sessions = map[string] chan int{}
Como eu apago sessions[key]
? Eu tentei:
sessions[key] = nil,false;
Isso não funcionou.
Atualização (novembro de 2011):
A sintaxe especial para excluir entradas do mapa é removida na versão 1 do Go :
O Go 1 removerá a atribuição especial de mapa e apresentará uma nova função interna
delete
::delete(m, x)
excluirá a entrada de mapa recuperada pela expressãom[x]
. ...
sessions["moo"] = sessions["moo"], false;
(? Ou é que errado)Copiado das notas de versão do Go 1
No idioma antigo, para excluir a entrada com a chave
k
do mapa representado porm
, escreveu-se a declaração,Essa sintaxe era um caso especial e peculiar, a única tarefa de dois para um. Exigia passar um valor (geralmente ignorado) que é avaliado mas descartado, além de um booleano que quase sempre era a constante falsa. Ele fez o trabalho, mas foi estranho e um ponto de discórdia.
No Go 1, essa sintaxe desapareceu; em vez disso, há uma nova função interna
delete
,. A chamadaexcluirá a entrada do mapa recuperada pela expressão
m[k]
. Não há reembolso. Excluir uma entrada inexistente não é uma opção.Atualização: A execução
go fix
converterá expressões do formuláriom[k] = value, false
emdelete(m, k)
quando estiver claro que o valor ignorado pode ser descartado com segurança do programa efalse
se refere à constante booleana predefinida. A ferramenta de correção sinalizará outros usos da sintaxe para inspeção pelo programador.fonte
Do Effective Go :
fonte
sessions.go:6: cannot use 0 (type int) as type chan int
assignment count mismatch: 1 = 2 (use delete)
Hoje em dia, nada vai falhar.
fonte
Use em
make (chan int)
vez denil
. O primeiro valor deve ser do mesmo tipo que o seu mapa contém.UPDATE: Corrigida minha resposta.
fonte
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);}