为什么无法转换 Slice 类型?

我想知道为什么你不能这样做:


type Foo struct { A int }

type Bar Foo


foos := []Foo{Foo{1}, Foo{2}}

bars := []Bar(foos)

//cannot convert foos (type []Foo) to type []Bar

我发现这需要运行时在切片上执行循环以转换每个元素,这将是非惯用的 Go。这是有道理的。


但是,这不能通过编译器仅别名Bar为来解决Foo,因此在内部它们是相同的并且它们在下面使用相同的类型标头吗?我猜答案是否定的,尽管我很好奇为什么。


四季花海
浏览 155回答 2
2回答

慕姐8265434

正如“为什么我可以键入别名函数并在不强制转换的情况下使用它们? ”中提到的那样在 Go 中,没有类型别名这样的东西。该type关键字引入新命名的类型。他们不是别名如果比较两个命名类型,名称必须匹配才能互换这是规范中提到的:类型声明将标识符、类型名称绑定到与现有类型具有相同基础类型的新类型,并且为现有类型定义的操作也为新类型定义。新类型与现有类型不同。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go