猿问

类型定义和接口转换

我已经尝试过以下代码:


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相同的底层类型吗?这背后是什么?


慕田峪4524236
浏览 89回答 1
1回答

至尊宝的传说

这将 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。
随时随地看视频慕课网APP

相关分类

Go
我要回答