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
。
|
|
- 自定义类型不会继承原有类型的方法,但接口方法或组合类型的内嵌元素则保留原有的方法。
|
|