本节我们的要掌握的知识点如下
1.怎么判断一个变量的类型
package main
import "fmt"
func main(){
var container = []int{1,2,3}
value,ok := interface{}(container).([]int)
fmt.Println(value)
fmt.Println(ok)
}
image.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 如下截图
所以一般情况下 我们尽量使用第一种方式进行转换
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)
}
image.png
网友评论