Go语言内置以下这些基础类型:
布尔类型:bool。
整型:int8、byte、int16、int、uint、uintptr等。
浮点类型:float32、float64。
复数类型:complex64、complex128。
字符串:string。
字符类型:rune。
错误类型:error。
此外,Go语言也支持以下这些复合类型:
指针(pointer)
数组(array)
切片(slice)
字典(map)
通道(chan)
结构体(struct)
接口(interface)
1、type关键字
go语言支持type关键字,可以定义一种类型,这个关键字大体上和C语言的typedef相似,但是有个关键点不同:不是同一个类型。
格式如下:
type Int int
上面这个语句,定义一个新的类型Int,这个类型和int具有同样的功能,但是确不是同一个类型,不能直接赋值,如下面代码编译出错:
var tmpInt Int
tmpInt = 3
上面”Int = 3”这个语句会编译出错,因为3默认是int,和Int不是同一类型,可以通过强制转换来实现上面的赋值:
tmpInt = Int(3)
2、布尔类型
可赋值为预定义的true和false。如:
var b1 bool
b1 = true
b2 := (1 == 2) //b2被推导为bool类型
注:布尔类型不可以被赋值为其它类型,也不接受自动或者强制类型转换。
3、整型
预定义的类型,各自间是不一样的,比如在32位机器上,int和int32也是不同的数据类型,不能自动进行类型转换,如果需要,可以用强制类型转换解决赋值或逻辑比较等问题。如:
var i1 int32
i2 := 5
i1 = i2 //编译错误,i1和i2分别为int32和int类型,不能自动转换
i1 = int32(i2) //正确的赋值语句,将i2强制转换成int32生成临时的int32的值,再传给i1(i2的类型仍然是int,不会改变)。
逻辑比较也是这个情况,下面的代码编译失败,因为不能比较2个不同的类型的值:
if i1 == i2 {
fmt.Println(“i1== i2”)
}
上面的这个情况也可以通过强制类型转换解决。
注:各种int类型的变量,都可以和字面常量(literal)比较。
注:整型数据的运算,包括+-*/%以及移位等运算,与C完全一样。唯一不同的是,C语言中的取反运算是~i,但是go语言中是^i。
4、接口(interface):
go语言中的接口非常特殊,几乎颠覆了以往面向对象编程语言的思想,专门分析。
5、其它几种类型:
其它几种类型和Python中的比较像,平时用的不多,就不详细分析了。
有疑问加站长微信联系(非本文作者)