一些关于判断变量类型与类型转换、不同类型之间的比较
一、如何判断变量类型
断言
下面是例子代码:
import (
"fmt"
)
func main() {
var name = "icode"
value, ok := interface{}(name).(string)
fmt.Println(value)
fmt.Println(ok)
}
注意:类型断言的时候我们必须先转换为接口类型
-
在Go语言中interace{} 代表空接口,任何类型都是它的实现类型
-
一对不包含任何东西的花括号,除了可以代表空的代码块之外,还可以用于表示不包含任何内容的数据结构(或者说数据类型)
-
如:
struct{}
,它就代表了不包含任何字段和方法的、空的结构体类型 -
空接口
interface{}
则代表了不包含任何方法定义的、空接口类型 -
字面量:用来表示数据类型本身的若干个字符
二、关于string类型和各种切片类型的互转
-
一个值从string类型向
[]byte
类型转换时代表UTF-8
编码的字符串被拆分成独立的字节 -
一个值从string类型向
[]rune
类型转换的时候代表着字符串会被拆分成一个个Unicode
字符
三、别名类型VS 潜在类型
我们可以通过下面方式声明:
type MyString = string
这样MyString
就是string
类型的别名类型
在Go内建的基本类型中就存在两个别名类型:byte是uint8的别名类型,而rune是int32的别名类型
而下面这种声明方式:
type MyString string
这里MyString和string就不是一种类型了,这种方式叫做对类型的再定义
我们可以把string是MyString的潜在类型
潜在类型的含义:某个类型在本质上是哪个类型,或者是哪个类型的集合。
如果两个值的潜在类型相同,却属于不同的类型,它们之间是可以做类型转换的。但是它们的值不能进行判断等或比较,它们变量之间不能赋值