我想知道为什么你不能这样做: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
关键字引入新命名的类型。他们不是别名如果比较两个命名类型,名称必须匹配才能互换
这是规范中提到的:
类型声明将标识符、类型名称绑定到与现有类型具有相同基础类型的新类型,并且为现有类型定义的操作也为新类型定义。
新类型与现有类型不同。
- 2 回答
- 0 关注
- 154 浏览
添加回答
举报
0/150
提交
取消