我已经尝试过以下代码:package mainimport ( "fmt" "sync")type T stringfunc main() { var a sync.Map // map[interface{}]interface{} var c T // a.Store("a", T("A")) a.Store("a", "A") b, _ := a.Load("a") c = b.(T) fmt.Println(c)}这会得到一个错误panic: interface conversion: interface {} is string, not main.T。但是,如果我使用注释行,它就会起作用。T和不是string相同的底层类型吗?这背后是什么?
1 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
这将 a 存储string
在地图中:
a.Store("a", "A")
这会从映射中加载值,但返回一个指向上面插入的值的接口,该接口是string
:
b, _ := a.Load("a")
这将检查是否b
是T
:
c = b.(T)
但b
是 a string
,因此断言失败。
如果你这样做:
a.Store("a",T("A"))
那么断言应该起作用,因为映射中值的类型现在是 a T
。
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报
0/150
提交
取消