【发布时间】:2020-03-16 15:26:33
【问题描述】:
我已经尝试了以下代码:
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 不是相同的底层类型吗?这背后的原因是什么?
【问题讨论】:
-
是的,它们具有相同的底层类型,这就是 conversion (
T(v)) 有效的原因,但是 type assertion (v.(T)) 是另一件事。 -
添加到上面,断言是严格的。 stackoverflow.com/questions/41501596/…
-
如果您是 Go 新手,则不需要 sync.Map。