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. 方法定义的接收器
*TTT x*T &x此处转换需要保证x可取地址T*T*T pT *p