基本类型
本节介绍下Golang中的基本数据类型,Golang中的基本数据类型包含如下几种:
布尔类型
bool
数值类型
int8, int16, int32, int64, int
uint8, uint16, uint32, uint64, uint
float32, float64
complex64, complex128
byte
rune
字符串类型
string
布尔类型
Golang中布尔类型用bool
表示,值为true
或false
。
这段程序中bool
类型的变量a
赋值为true
,变量b
赋值为false
。
c
赋值为a && b
,&&
运算符表示与操作,当a
,b
均为true
时才返回true
。
||
运算符表示或操作,当a
,b
其中之一为true
即返回true
。
前面程序的输出为:
有符号整型
所谓有符号是指表示的值可正可负。
int8 用8个比特表示的有符号整数类型 内存占用 8比特 表示范围 -128 ~ 127
int16 用16比特表示的有符号整数类型 内存占用 16比特 表示范围 -32768 ~ 32767
int32 用32比特表示的有符号整数类型 内存占用 32比特 表示范围 -2147483648 ~ 2147483647
int64 用64比特表示的有符号整数类型 内存占用 64比特 表示范围 -9223372036854775808 ~ 9223372036854775807
int 用32或64比特表示的有符号整数类型,具体是32位还是64位取决于操作系统 内存占用 同int32或int64 表示范围 同int32或int64
Go Playground在线运行 这段程序的输出如下:
前面这段程序中变量a
显示声明为int
类型,变量b
通过我们赋予的初始值(95)自动推断,Golang中整型值的默认类型是int
,这点下面的程序也有体现。
我们可以通过fmt.Printf
方法的%T
格式化参数来打印出变量的类型。还可以通过unsafe.Sizeof
获取变量占用的字节数(字节即byte,一个字节等于8个比特)。注意慎用unsafe
包,有可能有兼容性问题,这点根据包名称其实也能看出来。
下面的这段程序输出变量a
、b
的类型和占用的字节数。
Go Playground在线运行 该程序输出如下:
可以看出,变量a
、b
均为int
类型,并且占用了4个字节。但是如果是在64比特的系统上运行,将看到占用8个字节(64比特)。
无符号整型
uint8 用8个比特表示的无符号整数类型 内存占用 8比特 表示范围 0 ~ 255
uint16 用16个比特表示的无符号整数类型 内存占用 16比特 表示范围 0 ~ 65535
uint32 用32个比特表示的无符号整数类型 内存占用 32比特 表示范围 0 ~ 4294967295
uint64 用64个比特表示的无符号整数类型 内存占用 64比特 表示范围 0 ~ 18446744073709551615
uint 用32或64比特表示的无符号整数类型,具体是32位还是64位取决于操作系统 内存占用 同uint32或uint64 表示范围 同uint32或uint64
浮点类型
float32 用32比特表示的浮点数类型 float64 用64比特表示的浮点数类型 Golang浮现值的默认类型是float64
。下面的程序中变量a
、b
通过赋的初值自动推断数据类型,可以看出其数据类型确实为float64
。
Go Playground在线运行 该程序输出如下:
复数类型
complex64 实部和虚部均为float32
的复数类型 complex128 实部和虚部均为float64
的复数类型
Golang内置函数complex用来创建复数类型。定义如下,入参为浮点类型:
该函数接收浮点类型的实部r
和虚部i
两个参数,并返回复数类型。注意两个参数浮点类型必须严格一致,要么都是float32
,要么都是float64
。如果入参均为float32
则返回值为complex64
;如果入参均为float64
,则返回值为complex128
。
Golang为我们提供了复数简写语法糖,可以更加直观简洁的创建复数:
Go Playground在线运行 这段程序的输出如下,大家可以手动算一下确认正确与否:
其他数值类型
byte uint8类型的别名 rune int32类型的别名
这两个数值类型我们后面章节详细讨论字符串时再介绍。
字符串类型
Golang中字符串可以看作字节(byte)集合,这样说可能不太容易理解,后面章节我们详细讨论字符串时再介绍。现在我们可以把字符串类型看作是字符集合。
Go Playground在线运行 这段程序中,first
赋值为字符串Naveen
,last
赋值为字符串Ramanathan
。字符串可以通过+
运算符拼接。改程序输出如下:
当然了,字符串还有很多其他非常重要的使用方法,后面章节我们会再单独详细介绍。
强制类型转换
Golang是强类型的编程语言,并且不支持类型自动转换。
Go Playground在线运行 这段程序中的写法在C语言中其实是合法的,但是在Golang中却行不通。变量i
是int
类型,变量j
是float64
类型。前面程序中将两个不同类型的变量直接相加,执行会报错:
我们可以通过强制类型转换将变量j
转换为与变量i
相同的int
类型再进行相加,强制类型转换的语法为T(v)
。
Go Playground在线运行 现在可以正常输出结果:122
。
不仅仅是变量进行运算时,赋值时也要求变量必须匹配,如果不匹配需要强制类型转换:
前面程序中i
首先进行了强制类型转换然后才赋值为了不通类型的变量j
,执行结果如下:
Last updated
Was this helpful?