type
💥本文章所有相关go代码参考自go 1.18+版本
- 定义结构体、接口、类型别名等。
- 定义自定义类型:
- 自定义类型由一组值以及作用于这些值的方法组成。
- 类型一般有类型别名,往往从现有类型组合通过
type关键字构造出一个新的类型。
自定义类型
Go基础数据类型:bool、complex64、complex128、float32、float64。int、int8、int16、int32、int64、rune、string。uint、uint8、uint16、uint32、uint64、byte、uintptr。
- 使用
type关键字可以定义自己的类型,可以使用type定义一个新的结构体。 - 也可以把一个已经存在的类型作为基础类型而定义新类型,然后在代码中使用新的类型名字。
|
|
IZ是一种新类型,然后可以使用下面方式声明变量。
|
|
- 可以看到
int是变量a的底层类型,这也使得他们之间成为相互转化的可能。 - 定义多个类型如下:
|
|
- 在
type IZ int中,IZ就是在int类型基础上构建的新名称,这称为自定义类型,使用IZ来操作int类型的数据。 - 这种方法定义之后的类型可以拥有更多的特性,但是在类型转换时必须显示转换。
- 每个值都必须在经过编译后属于某个类型(编辑器必须能够推断出所有值得类型)因为
Go是一种静态类型语言。 - 在必要以及可行的情况下,一种类型的值可以被转换成另外一种类型的值。
Go语言不存在隐式转换,因此所有的转换都必须显式说明,就像调用一个函数一样(类型在这里的作用可以看作是一种函数)。
|
|
- 类型
B的值=类型B(类型A的值)。 type TZ int中,新类型TZ不会拥有原基础类型所附带的方法。
|
|
- 通过
type关键字在原有类型基础上构造出一个新类型,需要针对新类型来重新创建新方法。
类型别名
- 类型别名在
Go1.9版本中实现,将别名类型和原类型这两个类型视为完全一致。
|
|
- 与
type IZ int不同,type IZ = int只是为int取了个别名,而type IZ int却是定义了新类型。 - 自定义类型不会拥有原类型附带的方法,而别名拥有原类型附带的方法,类型别名拥有原类型全部的方法。
|
|
Go语言不存在类型继承。- 函数也是一个确定的类型,就是以函数签名作为类型,函数签名:函数的参数和返回值。
|
|
- 可以在函数体中的某处返回使用类型为
typeFunc的变量varfunc。
|
|
- 自定义类型不会继承原有类型的方法,但接口方法或组合类型的内嵌元素则保留原有的方法。
|
|