1. 无类型常量(隐式)
有些常量不从属某一具体类型,共六种:
编号 | 无类型常量 | 默认类型 |
---|---|---|
1 | 无类型布尔 | bool |
2 | 无类型整数 | int |
3 | 无类型符文 | rune |
4 | 无类型浮点数 | float64 |
5 | 无类型复数 | complex128 |
6 | 无类型字符串 | string |
变量声明没有指定具体类型时,无类型常量会隐式转换成该变量的默认类型
i := 0 // int(0)
r := '\000' // rune('\000')
f := 0.0 // float64(0.0)
c := 0i // complex128(0i)
var i8 int8 = 1 // int8(1) 无类型到具体类型的隐式转换,类型必须兼容
2. 显式类型转换
显式类型转换,基础类型必须兼容
i := int(1.2)
3. 类型断言
obj.(T),一般从接口类型转换为具体类型
x := obj.(T) // T可以是任何具体类型或者接口类型,如果转换不成功会panic
x, ok := obj.(T) // x只有ok为true时才有意义
4. 具体类型赋值给接口类型(隐式)
- 会暂时忘记具体类型的特征
- 具体类型必须兼容接口定义
type I interface{}
var x I = 0
5. 方法定义的接收器
- 如果方法定义接收器是
*T
,调用时是T
,隐式将T x
转换为*T &x
此处转换需要保证x可取地址
- 如果方法定义接收器是
T
,调用时是*T
,隐式将*T p
转换为T *p
- 如果方法定义接收器的类型和调用时的类型一致,不做任何转换
网友评论