我正在尝试使用反射从一个map中删除一个key,但是我找不到方法来实现它。我漏掉了什么?以下是我的代码(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将从map中删除该键。对于我的应用程序,我需要实际上从map中删除该键。有什么想法吗?