天天看点

类型也是可以包罗万象的interface

解析一下这个问题。 我们都知道,Go 语言的原生字典的键类型不能是函数类型、字典类型和切片类型。由于并发安全字典内部使用的存储介质正是原生字典,又因为它使用的原生字典键类型也是可以包罗万象的interface{};遴选真题所以,我们绝对不能带着任何实际类型为函数类型、字典类型或切片类型的键值去操作并发安全字典。

由于这些键值的实际类型只有在程序运行期间才能够确定,所以 Go 语言编译器是无法在编译期对它们进行检查的,不正确的键值实际类型肯定会引发 panic。IntStrMap) LoadOrStore(key int, value string) (actual string, loaded bool) {http://lx.gongxuanwang.com/sszt/7.htm, loaded := iMap.m.LoadOrStore(key, value)

func (iMap *IntStrMap) Range(f func(key int, value string) bool) {

f1 := func(key, value interface{}) bool {http://lx.gongxuanwang.com/lxzt/lxbszt.html return f(key.(int), value.(string))

因此,我们在这里首先要做的一件事就是:遴选真题 一定不要违反上述规则。我们应该在每次操作并发安全字典的时候,都去显式地检查键值的实际类型。无论是存、取还是删,都应该如此。

当然,更好的做法是,把针对同一个并发安全字典的这几种操作都集中起来,然后统一地编写检查代码。除此之外,把并发安全字典封装在一个结构体类型中,往往是一个很好的选择。