我已经尝试了以下代码:
package main
import (
"fmt"
"sync"
)
type T string
func 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
相同的基础类型?这背后是什么?
最佳答案
这存储了 string
在 map 中:
a.Store("a", "A")
这会从映射中加载值,但会返回一个指向上面插入的值的接口(interface),即
string
。 :b, _ := a.Load("a")
这将检查
b
是 T
:c = b.(T)
但是
b
是 string
,所以断言失败。如果你这样做:
a.Store("a",T("A"))
那么断言应该起作用,因为映射中值的类型现在是
T
.
关于go - 类型定义和接口(interface)转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58962350/