类型转换和断言
约 299 字大约 1 分钟...
相似点:
类型转换
、类型断言
本质都是把一个类型转换成另外一个类型。不同之处在于,类型断言是对接口变量进行的操作。类型转换:
- 转换前后的两个类型要相互兼容才行,高精度转低精度会出现数据精度异常等问题
- 语法:<结果类型> := <目标类型> ( <表达式> )
- 举例:
var i int = 9
var f float64
f = float64(i)
- 断言:
- go中所有接口都实现了空接口
interface{}
即 Any类型 - 场景:当一个函数的形参是
interface{}
,那么在函数中,需要对形参进行断言,从而得到它的真实类型 - 语法:
- <目标类型的值>,<布尔参数> := <表达式>.( 目标类型 ) // 安全类型断言
- <目标类型的值> := <表达式>.( 目标类型 ) // 非安全类型断言
- 举例:
- go中所有接口都实现了空接口
var i interface{} = new(Student)
s, ok := i.(Student)
if ok {
fmt.Println(s)
}
func judge(v interface{}) {
switch v := v.(type) {
case nil:
...
case Student:
...
case *Student:
..
}