go - 类型定义和接口(interface)转换

标签 go interface

我已经尝试了以下代码:

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 的错误。 .
但是,如果我使用注释行,它会起作用。

不是 Tstring相同的基础类型?这背后是什么?

最佳答案

这存储了 string在 map 中:

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

这会从映射中加载值,但会返回一个指向上面插入的值的接口(interface),即 string。 :
b, _ := a.Load("a")

这将检查 bT :
c = b.(T)

但是bstring ,所以断言失败。

如果你这样做:
a.Store("a",T("A"))

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

关于go - 类型定义和接口(interface)转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58962350/

相关文章:

python - Python中的"Interfaces": Yea or Nay?

go - 在生产者速度慢,消费者速度快的情况下,如何处理 channel 关闭同步?

c++ - 使用cgo调用c库的golang时未检测到sanitizer-leak

sql - 用于 postgres json 插入的原始参数化字符串

typescript - 我如何在 typescript 上制作多类型属性接口(interface)

c# - 通用接口(interface)上的代码约定问题

go - 尝试同步 goroutine 时出现死锁错误

http - 在同一个程序中同时运行 HTTP 和 HTTPS

java - android中所有 Activity 的单一socket.IO连接

c++ - 由于混合 CRTP 和接口(interface)而崩溃?