Golang:结构嵌入与“别名”

时间:2019-04-25 20:21:27

标签: go types

我了解结构嵌入

type newType struct {someStruct}

我知道类型别名:

go type newType = someStruct

但是有没有实际的使用理由

type newType someStruct

原始类型呢?

type newType int

这种定义的正确名称是什么?

2 个答案:

答案 0 :(得分:4)

命名:所有代码段均为 type declarations 。声明之一是 type alias (带有=的声明)。其余声明为 type definitions 。这些定义中的第一个使用带有嵌入式字段的结构。

代码type newType someStruct在需要定义一种与其他结构类型具有相同内存布局的新类型时很有用。这可能是因为程序员想要在相同的内存布局上使用不同的方法。

代码type newType int对于定义与int具有语义差异的类型或将方法附加到原始类型很有用。有关示例,请参见reflect.Kind

答案 1 :(得分:0)

  

结构嵌入与“混叠”


您正在将不同的构造混为一谈。

有关结构嵌入的定义,请参见The Go Programming Language Specification


以下是Go类型别名的解释和依据。

  

Go 1.9 Release Notes(发布于2017/08/24)

     

Changes to the language

     

Go现在支持类型别名以支持渐进式代码修复,而   在包之间移动类型。 type alias design document   和an article on refactoring详细介绍了该问题。在   简而言之,类型别名声明的格式为:

type T1 = T2
     

此声明引入了别名T1-另一个别名   拼写-由T2表示的类型;即T1T2   表示相同的类型。