我有一张地图:
var sessions = map[string] chan int{}
如何删除sessions[key]
?我试过:
sessions[key] = nil,false;
那没有用。
更新(2011 年 11 月):
Go 版本 1中删除了删除地图条目的特殊语法:
Go 1 将删除特殊的映射分配并引入一个新的内置函数,
delete
:delete(m, x)
将删除由表达式检索到的映射条目m[x]
。...
我有一张地图:
var sessions = map[string] chan int{}
如何删除sessions[key]
?我试过:
sessions[key] = nil,false;
那没有用。
更新(2011 年 11 月):
Go 版本 1中删除了删除地图条目的特殊语法:
Go 1 将删除特殊的映射分配并引入一个新的内置函数,
delete
:delete(m, x)
将删除由表达式检索到的映射条目m[x]
。...
奇怪的是,
package main
func main () {
var sessions = map[string] chan int{};
delete(sessions, "moo");
}
似乎工作。不过,这似乎对资源的使用不佳!
另一种方法是检查是否存在并使用值本身:
package main
func main () {
var sessions = map[string] chan int{};
sessions["moo"] = make (chan int);
_, ok := sessions["moo"];
if ok {
delete(sessions, "moo");
}
}
在旧语言中,k
要从 表示的映射中删除带有键的条目m
,可以编写以下语句,
m[k] = value, false
这种语法是一种特殊的特殊情况,是唯一的二对一赋值。它需要传递一个被评估但被丢弃的值(通常被忽略),加上一个几乎总是为假的布尔值。它完成了这项工作,但很奇怪并且是一个争论点。
在 Go 1 中,该语法已经消失;取而代之的是一个新的内置函数,delete
. 通话
delete(m, k)
将删除由表达式检索到的地图条目m[k]
。没有返回值。删除不存在的条目是无操作的。
更新:运行go fix
会将表单的表达式转换m[k] = value, false
为delete(m, k)
当很明显忽略的值可以安全地从程序中丢弃并false
引用预定义的布尔常量时。修复工具将标记语法的其他用途以供程序员检查。
从有效的开始:
要删除地图条目,请使用 delete 内置函数,其参数是地图和要删除的键。即使地图中已经没有密钥,这样做也是安全的。
delete(timeZone, "PDT") // Now on Standard Time
delete(sessions, "anykey")
这些天来,没有什么会崩溃。
使用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
}
更新:更正了我的答案。