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

为什么无法转换 Slice 类型?

为什么无法转换 Slice 类型?

Go
四季花海 2021-11-01 10:32:27
我想知道为什么你不能这样做:type Foo struct { A int }type Bar Foofoos := []Foo{Foo{1}, Foo{2}}bars := []Bar(foos)//cannot convert foos (type []Foo) to type []Bar我发现这需要运行时在切片上执行循环以转换每个元素,这将是非惯用的 Go。这是有道理的。但是,这不能通过编译器仅别名Bar为来解决Foo,因此在内部它们是相同的并且它们在下面使用相同的类型标头吗?我猜答案是否定的,尽管我很好奇为什么。
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

正如“为什么我可以键入别名函数并在不强制转换的情况下使用它们? ”中提到的那样

在 Go 中,没有类型别名这样的东西
type关键字引入新命名的类型。他们不是别名

如果比较两个命名类型,名称必须匹配才能互换

这是规范中提到的:

类型声明将标识符、类型名称绑定到与现有类型具有相同基础类型的新类型,并且为现有类型定义的操作也为新类型定义。
新类型与现有类型不同


查看完整回答
反对 回复 2021-11-01
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

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