为了账号安全,请及时绑定邮箱和手机立即绑定

类型定义和接口转换

类型定义和接口转换

Go
慕田峪4524236 2023-08-07 11:10:51
我已经尝试过以下代码: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")

这将检查是否bT

c = b.(T)

b是 a string,因此断言失败。

如果你这样做:

a.Store("a",T("A"))

那么断言应该起作用,因为映射中值的类型现在是 a T


查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 60 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信