分配等效类型的切片不起作用

时间:2018-11-19 23:33:31

标签: go

为什么不起作用?

package main

type Word uint8
type Memory []Word

func main() {
    bytes := []uint8{}
    memory := Memory{}
    bytes = memory
}

编译器会产生此错误:

9:9: cannot use memory (type Memory) as type []byte in assignment

据我了解,[]uint8Memory应该可以相互分配。

1 个答案:

答案 0 :(得分:0)

这里是assignability rules

在这种情况下,不保留任何类型,因此类型不可分配。

鉴于您提到的答案还不够详细,请仔细阅读每条可分配性规则:(为简便起见,我们使用A替代[]uint8,而B替代{ {1}})

  • x的类型与T相同。---不,[]WordA不同
  • x的类型V和T具有相同的基础类型,并且V或T中的至少一个不是定义的类型。 ---不,都是定义的类型
  • T是接口类型,x实现T。---它们都不是接口
  • x是双向通道值,T是通道类型,x的类型V和T具有相同的元素类型,并且V或T中的至少一个不是定义的类型。 ---它们都不是频道
  • x是预声明的标识符nil,T是指针,函数,切片,映射,通道或接口类型。 ---他们都不拥有B的价值
  • x是可以用类型T的值表示的无类型常量。---不,不涉及常量

因此,如您所见-无法将nil分配给A

如果您将Memory声明为B可以正常工作(如注释中提到的@RayfenWindspear),我可以确定问题的根源更多是“为什么”而不是“如何解决”。 / p>