【发布时间】:2014-04-29 23:31:02
【问题描述】:
我正在尝试使用反射从地图中删除一个键,但我找不到执行此操作的方法。我错过了什么?我有以下代码(http://play.golang.org/p/7Et8mgmSKO):
package main
import (
"fmt"
"reflect"
)
func main() {
m := map[string]bool{
"a": true,
"b": true,
}
delete(m, "a")
fmt.Printf("DELETE: %v\n", m)
m = map[string]bool{
"a": true,
"b": true,
}
m["a"] = false
fmt.Printf("ASSIGN: %v\n", m)
m = map[string]bool{
"a": true,
"b": true,
}
v := reflect.ValueOf(m)
v.SetMapIndex(reflect.ValueOf("a"), reflect.Zero(reflect.TypeOf(m).Elem()))
fmt.Printf("REFLECT: %v\n", m)
}
生成输出:
DELETE: map[b:true]
ASSIGN: map[a:false b:true]
REFLECT: map[a:false b:true]
如您所见,反射情况似乎与分配零值相同,而不是删除它。这似乎与 reflect.SetMapIndex() 的文档相反,该文档说 (http://golang.org/pkg/reflect/#Value.SetMapIndex):
如果 val 是零值,SetMapIndex 会从地图中删除键。
对于我的应用程序,我实际上需要从地图中删除键。有什么想法吗?
【问题讨论】:
标签: go