Answers:
很奇怪的是,
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
此语法是一种特殊的特殊情况,唯一的二对一分配。它需要传递一个被评估但被丢弃的值(通常被忽略),以及一个几乎总是常量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
assignment count mismatch: 1 = 2 (use delete)
使用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
}
更新:更正了我的答案。
package main func main () {var sessions = map[string] chan int{};sessions["moo"] = make (chan int);}
sessions["moo"] = sessions["moo"], false;
还是这样吗?)