删除映射中的键

我有一张地图:

var sessions =  map[string] chan int{}

如何删除sessions[key]?我试着:

sessions[key] = nil,false;

这并没有起作用。

更新(2011年11月):

Go版本1中删除映射项的特殊语法被删除:

Go 1将删除特殊的映射赋值,并引入一个新的内置函数delete: delete(m, x)将删除表达式m[x]. ...检索到的映射项

313065 次浏览

有效的去:

要删除一个map条目,使用delete内置函数,其参数是map和要删除的键。这样做是安全的,即使该键已经从映射中缺席。

delete(timeZone, "PDT")  // Now on Standard Time

使用make (chan int)代替nil。第一个值必须与你的映射持有的类型相同。

package main


import "fmt"


func main() {


var sessions = map[string] chan int{}
sessions["somekey"] = make(chan int)


fmt.Printf ("%d\n", len(sessions)) // 1


// Remove somekey's value from sessions
delete(sessions, "somekey")


fmt.Printf ("%d\n", len(sessions)) // 0
}

修正了我的答案。

Go引入了一个delete(map, key)函数:

package main


func main () {
var sessions = map[string] chan int{};
delete(sessions, "moo");
}
delete(sessions, "anykey")

如今,没有什么东西会崩溃。

从Go 1 发布说明复制

在旧语言中,要从由m表示的映射中删除键为k的条目,可以这样写:

m[k] = value, false

这种语法是一种特殊的情况,只有二比一的赋值。它需要传递一个值(通常被忽略),该值被计算但被丢弃,加上一个布尔值,几乎总是常量false。它确实起了作用,但很奇怪,也是一个争论的焦点。

在Go 1中,这种语法已经消失;取而代之的是一个新的内置函数delete。调用

delete(m, k)

将删除表达式m[k]检索到的映射条目。没有返回值。删除不存在的条目是不允许的。

当被忽略的值可以安全地从程序中丢弃,并且false指的是预定义的布尔常量时,运行go fix将把形式为m[k] = value, false的表达式转换为delete(m, k)。修复工具将标记语法的其他用法,以供程序员检查。