本节我们的要掌握的知识点如下
1.怎么判断一个变量的类型
package main
import "fmt"
func main(){
var container = []int{1,2,3}
value,ok := interface{}(container).([]int)
fmt.Println(value)
fmt.Println(ok)
}
![1594482-4a91c81797610c18](https://i-blog.csdnimg.cn/blog_migrate/a2177dbad00e926cf48691f5a2973054.webp?x-image-process=image/format,png)
value,ok := interface{}(container).([]int)
这句代码的含义解释一下
interface{}(container)是把container转换为空接口
.([]int)判断前者的类型是否为切片类型 []int,判断结果赋值给ok,如果是true就将转换后的结果赋值给value,否则将nil赋值给value
下面有一个问题
value:= interface{}(container).([]int)
这句话执行的结果会怎么呢?
如果container 为 []int 类型,那么value就是类型转换后的值
如果container 不是 []int 类型呢? 那么程序就会抛出一个panic 如下截图
![1594482-49bd7deb53d3c345](https://i-blog.csdnimg.cn/blog_migrate/8e7474226d9306939aa5f381788fbebd.webp?x-image-process=image/format,png)
所以一般情况下 我们尽量使用第一种方式进行转换
x.(T) 这个就是类型转换公式,注意几点
1.x必须是接口类型,具体哪个接口类型无所谓,你可能疑惑什么是接口类型,请查阅接口类型
2.interface{} 代表空接口类型, {} 可以表示空的数据块,也可以表示不包含任何内容的数据结构,
比如 struct{} 表示不包含任何方法和字段的的空结构体;[]string{}表示空切片 map[int]string{} 空字典
3.T就做类型字面量,即数据类型,通俗的讲就是用字符表示弄一种数据类型结构
类型转换
T(x)
package main
import "fmt"
func main(){
value:= int('9')
fmt.Println(value)
}
猜猜输入是什么?
答案不是9, 57 字符9 转换成数字就是57,比如字符a转换成数字就是98
那么怎么转换成数字了
package main
import (
"fmt"
"strconv"
)
func main(){
value,ok:= strconv.Atoi("9")
fmt.Println(value)
fmt.Println(ok)
}
在看一个例子
package main
import (
"fmt"
)
func main(){
var a = 128
value := int8(a)
fmt.Println(value)
}
答案是 - 128
解释一下 127 二进制是 01111 1111 ,那么128 就是 1000 0000,第一位是符号位,即负值,那么值为补码 + 1 即 127 + 1 = 128 则值为 - 128
获取值类型的名称
package main
import (
"fmt"
"reflect"
)
func main(){
var a = 128
typeName := reflect.TypeOf(a)
fmt.Println(typeName)
}
![1594482-dd2ab2fcdd194ed8](https://i-blog.csdnimg.cn/blog_migrate/e14e57b98c0a5a2a03c7d2a9d9c88b73.webp?x-image-process=image/format,png)