gpt4 book ai didi

go - 如何使用反射从 Go (golang) 中的 map 中获取 "delete"键

转载 作者:IT王子 更新时间:2023-10-29 01:26:08 45 4
gpt4 key购买 nike

我正在尝试使用反射从 map 中删除一个键,但找不到执行此操作的方法。我错过了什么?我有以下代码(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 ):

If val is the zero Value, SetMapIndex deletes the key from the map.

对于我的应用程序,我实际上需要从 map 中删除键。有什么想法吗?

最佳答案

SetMapIndex 不是代表 map 值类型的零值的 reflect.Value,而是期望 reflect.Value 的零值本身以删除 key 。所以你反而想要这样的东西:

v.SetMapIndex(reflect.ValueOf("a"), reflect.Value{})

关于go - 如何使用反射从 Go (golang) 中的 map 中获取 "delete"键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23368843/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com